シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
探検
シェルスクリプト総合 その29
■ このスレッドは過去ログ倉庫に格納されています
2018/09/21(金) 23:34:47.98ID:/eJt2TVD
591デフォルトの名無しさん
2019/05/28(火) 00:30:04.64ID:WhpCGVUS $ timer.sh 1h30m
引数がこう指定された場合1hと30mはどう捌けばいいんでしょう?
練習で簡易タイマーを作ったんですが時間の複数指定がどうも上手く行かず
この場合は1時間半の指定にしたいんです
一応1.5hのような数値指定にも対応はさせましたが
timer(){
for arg in "$@" ;do
if [[ "$arg" =~ ([0-9]+\.?[0-9]+?)(.?) ]] ;then
num=${BASH_REMATCH[1]}
unit=${BASH_REMATCH[2]}
case "$unit" in
[s])
count=$(bc -l <<< "scale=2;$num")
echo $(date "+%x(%a) %X") 待機:${num}秒
echo $(date "+%x(%a) %X" -d "$count sec") 再開
sleep $count
;;
...
中はこんなcase文が後mとhと続きます
まだ初学段階ですがもっとマシな書き方はありますかね
引数がこう指定された場合1hと30mはどう捌けばいいんでしょう?
練習で簡易タイマーを作ったんですが時間の複数指定がどうも上手く行かず
この場合は1時間半の指定にしたいんです
一応1.5hのような数値指定にも対応はさせましたが
timer(){
for arg in "$@" ;do
if [[ "$arg" =~ ([0-9]+\.?[0-9]+?)(.?) ]] ;then
num=${BASH_REMATCH[1]}
unit=${BASH_REMATCH[2]}
case "$unit" in
[s])
count=$(bc -l <<< "scale=2;$num")
echo $(date "+%x(%a) %X") 待機:${num}秒
echo $(date "+%x(%a) %X" -d "$count sec") 再開
sleep $count
;;
...
中はこんなcase文が後mとhと続きます
まだ初学段階ですがもっとマシな書き方はありますかね
592デフォルトの名無しさん
2019/05/28(火) 01:11:40.50ID:vCL2HYTO echo 1h30m | { echo 'scale=0;'; sed 's/h/*3600+/;s/m/*60+/;s/s//;s/+$//;s:.*:(&)/1:'; } | bc
とかかな。
とかかな。
593デフォルトの名無しさん
2019/05/28(火) 08:21:17.64ID:wDZh4gqJ とりあえずBashの[[コマンドよりsedコマンドを使ったほうがいいとは思う。
594デフォルトの名無しさん
2019/05/29(水) 19:17:53.10ID:S3MJvn1i 最近sedほとんど使わなくなった。
perl -peで代用しちゃう。
perl -peで代用しちゃう。
595デフォルトの名無しさん
2019/05/29(水) 19:32:57.87ID:UDeAAaE3 katochan -pe
596デフォルトの名無しさん
2019/05/29(水) 23:00:56.57ID:7bPFMo5i >>593
sedコマンド使うとめちゃくちゃ遅くなるぞ
sedコマンド使うとめちゃくちゃ遅くなるぞ
597デフォルトの名無しさん
2019/05/30(木) 00:09:39.31ID:nqYCZCfw >>591でめちゃめちゃ遅くなるって、頭大丈夫か?
598デフォルトの名無しさん
2019/05/30(木) 00:17:55.45ID:X2KDG1Lz >>597
10〜100倍ぐらい遅くなるだろうね。
10〜100倍ぐらい遅くなるだろうね。
599デフォルトの名無しさん
2019/05/30(木) 00:44:29.88ID:nqYCZCfw 遅いからそれがなんなの?って意味なんだけど
そんなに意味がない速さにこだわるなら、なんでもかんでもCで書くべきだろうにw
そんなに意味がない速さにこだわるなら、なんでもかんでもCで書くべきだろうにw
600デフォルトの名無しさん
2019/05/30(木) 01:22:28.57ID:X2KDG1Lz 意味があるかどうかは使い方次第
601デフォルトの名無しさん
2019/05/30(木) 02:25:31.12ID:nqYCZCfw 言っている意味がわからん。>>591でって言っているんだけど
602デフォルトの名無しさん
2019/05/30(木) 03:06:10.03ID:S0ORv27w つうかおれは>>597が意味不明だ
603デフォルトの名無しさん
2019/05/30(木) 03:17:49.10ID:nqYCZCfw >>591は何度も繰り返すわけでもなく単なるタイマー起動するまでだけという、また、例の指定時間が1h30mという
起動するのに、0.1秒かかるのと0.01秒もしくは0.001秒でになんの差があるというのか、なんでそんなとこ気になんの?病気じゃないのってとこかな
起動するのに、0.1秒かかるのと0.01秒もしくは0.001秒でになんの差があるというのか、なんでそんなとこ気になんの?病気じゃないのってとこかな
604デフォルトの名無しさん
2019/05/30(木) 19:27:13.10ID:9DfhdkhJ605デフォルトの名無しさん
2019/06/01(土) 00:35:45.39ID:qWUYdvcJ 自分の方が賢いと思って知ったかぶりしてるだけでしょ。子供にはよくあることだよ。
ここには悪質な荒らしも来るんだから、スルーできないと荒らしの思う壺じゃないかな。
ここには悪質な荒らしも来るんだから、スルーできないと荒らしの思う壺じゃないかな。
606デフォルトの名無しさん
2019/06/01(土) 08:13:31.43ID:4/16u2qR >>604
要求される精度は1分程度なんてお題に書いてあるっけ?
要求される精度は1分程度なんてお題に書いてあるっけ?
607デフォルトの名無しさん
2019/06/02(日) 08:32:31.26ID:dZpvnFnK >>606
引数が時・分なんだから、ふつーは秒単位は考慮不要と受け取るやろ
引数が時・分なんだから、ふつーは秒単位は考慮不要と受け取るやろ
608デフォルトの名無しさん
2019/06/02(日) 09:23:20.78ID:aBeO7O7s それは仕様の説明じゃないよねえ
609デフォルトの名無しさん
2019/06/02(日) 20:55:19.29ID:SX5hebJf >>608
それを言うなら,お題には「プログラムの起動が遅かったらだめ」とも書いてねーよw
だからsedを使っても何ら問題ない。
↓こんなのでいいんじゃないかな?
ちょっと抜けがある(..h..mみたいな不正な指定も通してしまう)けど
自分で使うプログラムなら,これくらい入力時に注意できるから
そこまで厳密な判定は要らないと判断した。
sleep $(echo "($(echo '1h30m' | sed -e 's/\([0-9.][0-9.]\)*h\([0-9.][0-9.]\)*m/\1 * 60 + \2/')) * 60" | bc -l)
それを言うなら,お題には「プログラムの起動が遅かったらだめ」とも書いてねーよw
だからsedを使っても何ら問題ない。
↓こんなのでいいんじゃないかな?
ちょっと抜けがある(..h..mみたいな不正な指定も通してしまう)けど
自分で使うプログラムなら,これくらい入力時に注意できるから
そこまで厳密な判定は要らないと判断した。
sleep $(echo "($(echo '1h30m' | sed -e 's/\([0-9.][0-9.]\)*h\([0-9.][0-9.]\)*m/\1 * 60 + \2/')) * 60" | bc -l)
610デフォルトの名無しさん
2019/06/02(日) 21:19:46.36ID:MyJb8SVO それだと 1.5h とかが変換できない
611デフォルトの名無しさん
2019/06/02(日) 22:34:06.55ID:XxY3JLef >>592でいいんじゃない
612デフォルトの名無しさん
2019/06/03(月) 00:56:39.44ID:amnwC05e613デフォルトの名無しさん
2019/06/03(月) 01:08:52.27ID:0fpHz+xZ Ubuntu 19.04 だと
(standard_in) 1: syntax error
sleep: missing operand
となる。
echo "($(echo '1.5h' | sed -e 's/\([0-9.][0-9.]\)*h\([0-9.][0-9.]\)*m/\1 * 60 + \2/')) * 60"
が (1.5h) * 60 になるので bc でエラーになる
(standard_in) 1: syntax error
sleep: missing operand
となる。
echo "($(echo '1.5h' | sed -e 's/\([0-9.][0-9.]\)*h\([0-9.][0-9.]\)*m/\1 * 60 + \2/')) * 60"
が (1.5h) * 60 になるので bc でエラーになる
614デフォルトの名無しさん
2019/06/03(月) 03:44:14.58ID:60TnqmAc >>613
ドットは \ でのエスケープが必用なのでは?
ドットは \ でのエスケープが必用なのでは?
615デフォルトの名無しさん
2019/06/03(月) 04:14:04.85ID:xnZUjfNJ >>592は冗長やな
echo 1h30m | { echo 'scale=0;'; sed 's/h/*3600+/;s/m/*60+/;s/s//;s/+$//;s:.*:(&)/1:'; } | bc
echo 1h30m | sed 's/h/*3600+/;s/m/*60+/;s/s/+/;s:.*:scale=0;(&0)/1:' | bc
scale=0はデフォルトだからいらんと思うけど
echo 1h30m | { echo 'scale=0;'; sed 's/h/*3600+/;s/m/*60+/;s/s//;s/+$//;s:.*:(&)/1:'; } | bc
echo 1h30m | sed 's/h/*3600+/;s/m/*60+/;s/s/+/;s:.*:scale=0;(&0)/1:' | bc
scale=0はデフォルトだからいらんと思うけど
616デフォルトの名無しさん
2019/06/03(月) 04:53:12.91ID:xnZUjfNJ >>613
仕様です。
・1h23m45s みたいな秒には対応していません。エラーになります。
・mは必須です。mを省略した場合エラーになります。1.5hの場合は1.5h00mと入力してください。
・1文字のmには対応していません。エラーになります。1mは01mと入力してください。
・mが3文字以上で文字数が奇数の場合は、対応していません。エラーになります。
・mが4文字以上で文字数が偶数の場合は、下位2文字のみが使用されます。(例 1234m の場合 34、12.345の場合45)
・1文字のhには対応しています。
・hの文字数が偶数の場合は、下位2文字のみが使用されます。(例 1234h の場合 34、1.23の場合23)
・hの文字数奇数の場合は、最初の1文字と下位2文字をあわせた、3文字が使用されます。(例 12345h の場合 145、123.5の場合1.5、1.23の場合23)
仕様です。
・1h23m45s みたいな秒には対応していません。エラーになります。
・mは必須です。mを省略した場合エラーになります。1.5hの場合は1.5h00mと入力してください。
・1文字のmには対応していません。エラーになります。1mは01mと入力してください。
・mが3文字以上で文字数が奇数の場合は、対応していません。エラーになります。
・mが4文字以上で文字数が偶数の場合は、下位2文字のみが使用されます。(例 1234m の場合 34、12.345の場合45)
・1文字のhには対応しています。
・hの文字数が偶数の場合は、下位2文字のみが使用されます。(例 1234h の場合 34、1.23の場合23)
・hの文字数奇数の場合は、最初の1文字と下位2文字をあわせた、3文字が使用されます。(例 12345h の場合 145、123.5の場合1.5、1.23の場合23)
617デフォルトの名無しさん
2019/06/03(月) 04:54:33.38ID:xnZUjfNJ618デフォルトの名無しさん
2019/06/03(月) 05:00:32.74ID:xnZUjfNJ 仕様漏れ
・hは必須です。hを省略した場合エラーになります。30mの場合は0h30mと入力してください。
・hは必須です。hを省略した場合エラーになります。30mの場合は0h30mと入力してください。
619デフォルトの名無しさん
2019/06/03(月) 05:42:18.06ID:MigZwPEH なんやこいつ。またか
620デフォルトの名無しさん
2019/06/03(月) 06:51:59.05ID:xnZUjfNJ >>619
なににムカついたの?
なににムカついたの?
621デフォルトの名無しさん
2019/06/03(月) 07:25:22.55ID:amnwC05e >>616
> ・mが4文字以上で文字数が偶数の場合は、下位2文字のみが使用されます。(例 1234m の場合 34、12.345の場合45)
この仕様の意味ってなに?
この仕様を無視して,
「mの前の数字は2桁でなくてはならない」
という仕様に統一すれば,すごく書き易いシェルスクリプトになると思うんだけど。
> ・mが4文字以上で文字数が偶数の場合は、下位2文字のみが使用されます。(例 1234m の場合 34、12.345の場合45)
この仕様の意味ってなに?
この仕様を無視して,
「mの前の数字は2桁でなくてはならない」
という仕様に統一すれば,すごく書き易いシェルスクリプトになると思うんだけど。
622デフォルトの名無しさん
2019/06/03(月) 07:29:35.13ID:amnwC05e >>616
追加で質問。
なんでhやmの前の数字の桁数の偶奇に拘るの?
例えば,
・mの前には二桁の整数(0埋め)しか許されない
・hの前には小数点以下一位の精度で99以下の数しか許されない
という仕様のほうが,仕様も短かいし実装も簡潔になると思うんだけど。
追加で質問。
なんでhやmの前の数字の桁数の偶奇に拘るの?
例えば,
・mの前には二桁の整数(0埋め)しか許されない
・hの前には小数点以下一位の精度で99以下の数しか許されない
という仕様のほうが,仕様も短かいし実装も簡潔になると思うんだけど。
623デフォルトの名無しさん
2019/06/03(月) 08:15:05.64ID:8eXXlkO0 Ruby では、
re = /([^h]+)h([^m]+)m/
# str = "1h0m"
str = "1.5h0m"
md = str.match( re )
# p md[ 1 ], md[ 2 ] #=> capture 部分
begin # 整数じゃなければ、浮動小数点にする
hour = Integer( md[ 1 ] )
rescue ArgumentError
hour = Float( md[ 1 ] )
end
minute = md[ 2 ].to_i # 整数
p hour, minute #=> 1.5, 0
re = /([^h]+)h([^m]+)m/
# str = "1h0m"
str = "1.5h0m"
md = str.match( re )
# p md[ 1 ], md[ 2 ] #=> capture 部分
begin # 整数じゃなければ、浮動小数点にする
hour = Integer( md[ 1 ] )
rescue ArgumentError
hour = Float( md[ 1 ] )
end
minute = md[ 2 ].to_i # 整数
p hour, minute #=> 1.5, 0
624デフォルトの名無しさん
2019/06/03(月) 09:09:22.60ID:8ZNdPBG6625デフォルトの名無しさん
2019/06/03(月) 09:23:57.43ID:amnwC05e >>624
ほーん。*長文*ありがとう。
ほーん。*長文*ありがとう。
626デフォルトの名無しさん
2019/06/03(月) 09:33:21.71ID:0fpHz+xZ >>614
\([0-9.][0-9.]\)*m が入ってしまっているので、
echo "($(echo '1.5h00m' | sed -e 's/\([0-9.][0-9.]\)*h\([0-9.][0-9.]\)*m/\1 * 60 + \2/')) * 60"
とかするしかない
echo "($(echo '1.5h' | sed -e 's/\([0-9.][0-9.]\)*h\(\([0-9.][0-9.]\)*m\)\?/\1 * 60 + \3/')) * 60"
なんてすると、 (1.5 * 60 + ) * 60 になって bc で syntax error
\([0-9.][0-9.]\)*m が入ってしまっているので、
echo "($(echo '1.5h00m' | sed -e 's/\([0-9.][0-9.]\)*h\([0-9.][0-9.]\)*m/\1 * 60 + \2/')) * 60"
とかするしかない
echo "($(echo '1.5h' | sed -e 's/\([0-9.][0-9.]\)*h\(\([0-9.][0-9.]\)*m\)\?/\1 * 60 + \3/')) * 60"
なんてすると、 (1.5 * 60 + ) * 60 になって bc で syntax error
627デフォルトの名無しさん
2019/06/03(月) 09:35:00.19ID:z2LdD30j >>626
行き当たりばったりのクソコードなんか相手にしなくていいで
行き当たりばったりのクソコードなんか相手にしなくていいで
628デフォルトの名無しさん
2019/06/03(月) 09:40:07.68ID:z2LdD30j 代わりに俺が同じアプローチのまとなコード書いてやるからよ
echo '1.5h' | sed -E 's/(([0-9.]+)h)?(([0-9.]+)m)?(([0-9.]+)s)?/(\2-0)*3600+(\4-0)*60+(\6-0)/' | bc
(.0を消したければ>>615を参考に /1 すればいい)
echo '1.5h' | sed -E 's/(([0-9.]+)h)?(([0-9.]+)m)?(([0-9.]+)s)?/(\2-0)*3600+(\4-0)*60+(\6-0)/' | bc
(.0を消したければ>>615を参考に /1 すればいい)
629デフォルトの名無しさん
2019/06/03(月) 09:49:10.30ID:0fpHz+xZ やるなぁ、、て言うか相手してやってるやんw
630デフォルトの名無しさん
2019/06/03(月) 09:52:56.88ID:z2LdD30j クソコードはクソコードで終わりでいいって話
あ、クソコードですね♪使い物になりませんね♪でいいってことよ。
いちいちこういう場合にエラーがなりますとかやらなくていい
さっさと廃棄処分してしまおう。
あ、クソコードですね♪使い物になりませんね♪でいいってことよ。
いちいちこういう場合にエラーがなりますとかやらなくていい
さっさと廃棄処分してしまおう。
631623
2019/06/03(月) 11:22:16.99ID:8eXXlkO0 まず設計がおかしい!
バグのほとんどは、設計がおかしいから起きる
時間は、0〜24 の整数のみ。
分は、0〜60 の整数のみ
最大で、24時間までとか
整数に変換できなければ、浮動小数点に変換するとか、こんなおかしな設計はない!
バグのほとんどは、設計がおかしいから起きる
時間は、0〜24 の整数のみ。
分は、0〜60 の整数のみ
最大で、24時間までとか
整数に変換できなければ、浮動小数点に変換するとか、こんなおかしな設計はない!
632デフォルトの名無しさん
2019/06/03(月) 11:25:36.69ID:8qtiF3dA633デフォルトの名無しさん
2019/06/03(月) 11:26:56.98ID:amnwC05e >>632
やめたれw
やめたれw
634デフォルトの名無しさん
2019/06/03(月) 12:27:27.29ID:3fU/jk6b つまりrubyを使うと統合失調症になってしまうということ?
635デフォルトの名無しさん
2019/06/03(月) 13:18:07.10ID:amnwC05e そんなことには、ならない!
Rubyは、すばらしい言語
Rubyは、すばらしい言語
636デフォルトの名無しさん
2019/06/03(月) 13:28:47.52ID:3fU/jk6b やっぱりなってしまうんだね…
637623
2019/06/04(火) 05:26:37.80ID://1XsOfQ 整数に変換できなければ、浮動小数点に変換するとか、明らかにおかしいでしょ?
だから、質問者に言われた通りに書いたら、おかしいと言うこと!
>>631
>時間は、0〜24 の整数のみ。
>分は、0〜60 の整数のみ
多くの言語が採用しているのは、
時間は、0〜23 の整数のみ。
分は、0〜59 の整数のみ
色んな言語の、Time クラスのメソッドを参照
だから、質問者に言われた通りに書いたら、おかしいと言うこと!
>>631
>時間は、0〜24 の整数のみ。
>分は、0〜60 の整数のみ
多くの言語が採用しているのは、
時間は、0〜23 の整数のみ。
分は、0〜59 の整数のみ
色んな言語の、Time クラスのメソッドを参照
638デフォルトの名無しさん
2019/06/04(火) 05:55:02.35ID:oQKNEIyc >>623「整数に変換できなければ、浮動小数点に変換する」
↓
>>631「整数に変換できなければ、浮動小数点に変換するとか、こんなおかしな設計はない!」
↓
>>637「質問者が整数に変換できなければ、浮動小数点に変換するって言った!浮動小数点でスレを検索してみろ!」
【検索結果】
623 名前:デフォルトの名無しさん[sage] 投稿日:2019/06/03(月) 08:15:05.64 ID:8eXXlkO0 [1/2]
631 名前:623[sage] 投稿日:2019/06/03(月) 11:22:16.99 ID:8eXXlkO0 [2/2]
637 名前:623[] 投稿日:2019/06/04(火) 05:26:37.80 ID://1XsOfQ
↓
>>631「整数に変換できなければ、浮動小数点に変換するとか、こんなおかしな設計はない!」
↓
>>637「質問者が整数に変換できなければ、浮動小数点に変換するって言った!浮動小数点でスレを検索してみろ!」
【検索結果】
623 名前:デフォルトの名無しさん[sage] 投稿日:2019/06/03(月) 08:15:05.64 ID:8eXXlkO0 [1/2]
631 名前:623[sage] 投稿日:2019/06/03(月) 11:22:16.99 ID:8eXXlkO0 [2/2]
637 名前:623[] 投稿日:2019/06/04(火) 05:26:37.80 ID://1XsOfQ
639デフォルトの名無しさん
2019/06/04(火) 06:05:44.33ID:oQKNEIyc >>637
俺はシェルスクリプトもRubyも上級者なんだよなぁ(苦笑)
$ irb
irb(main):001:0> require 'active_support/time'
=> true
irb(main):002:0> 1.5.hours
=> 5400.0 seconds
俺はシェルスクリプトもRubyも上級者なんだよなぁ(苦笑)
$ irb
irb(main):001:0> require 'active_support/time'
=> true
irb(main):002:0> 1.5.hours
=> 5400.0 seconds
640デフォルトの名無しさん
2019/06/04(火) 11:07:03.94ID:P6ocUs46 >>638
草ァ!
草ァ!
641デフォルトの名無しさん
2019/06/04(火) 23:40:36.15ID:91A1BNDa >>591
最初に引数を"h"→"h "、"m"→"m "に変換するといいんじゃないかな
最初に引数を"h"→"h "、"m"→"m "に変換するといいんじゃないかな
642デフォルトの名無しさん
2019/06/05(水) 00:03:31.85ID:uJguGtrO 小数点を含んだ時刻表記(単位は時・分)を秒数に正規化する,みたいな話かね
643デフォルトの名無しさん
2019/06/05(水) 01:44:13.04ID:Rs8bMd2A 練習のために書いてて、うまい書き方は無いかという話だった気がするのだが…
644デフォルトの名無しさん
2019/06/05(水) 12:04:44.96ID:UTQhx3T7 だよな、単に。sedならという応えも直後にあっての
変なのが変な話に変えてる
変なのが変な話に変えてる
645デフォルトの名無しさん
2019/06/05(水) 12:17:13.51ID:HgsnwJuZ 質問者「今から1時間後とか、あと1.5時間後とかにも対応してみました」
Ruby厨「整数に変換できなければ、浮動小数点に変換するとか、こんなおかしな設計はない!」
Ruby厨「時間は0〜24の整数のみ! 午前1時30分のことを1.5時とか言わない!」
Ruby厨「整数に変換できなければ、浮動小数点に変換するとか、こんなおかしな設計はない!」
Ruby厨「時間は0〜24の整数のみ! 午前1時30分のことを1.5時とか言わない!」
646デフォルトの名無しさん
2019/06/05(水) 15:13:01.25ID:ufQ3ijM/ バッシュでファイル名がアスキーコードが判定する方法教えて下さい一番簡単に
アスキーコードはUTF8の一部でもあるのでnkfは確認出来ないとおもいました
アスキーコードはUTF8の一部でもあるのでnkfは確認出来ないとおもいました
647デフォルトの名無しさん
2019/06/05(水) 16:22:42.00ID:ujLKUPuk if iconv -t ASCII <<< "$filename" > /dev/null 2>&1; then
必要なら -f を。必要なら ASCII 以外の他のエンコーディングを
必要なら -f を。必要なら ASCII 以外の他のエンコーディングを
648デフォルトの名無しさん
2019/06/05(水) 16:47:06.73ID:HgsnwJuZ >>646
この程度でbash専用にする必要ない。nkfもiconvも遅い。
case $filename in
*[!a-z]*) # a-z以外の文字がある
*) # a-zのみ
esac
あとはASCIIのみになるようにすればいい
POSIX文字クラスを使うと楽
https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions#Character_classes
制御コード入れたいのかにもよるのとASCIIコード以外にあてはまるかどうか調べてないが
例えば [![:cntrl:][:print:]] とかかな? 最悪一文字ずつ書けばいいだろう。
この程度でbash専用にする必要ない。nkfもiconvも遅い。
case $filename in
*[!a-z]*) # a-z以外の文字がある
*) # a-zのみ
esac
あとはASCIIのみになるようにすればいい
POSIX文字クラスを使うと楽
https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions#Character_classes
制御コード入れたいのかにもよるのとASCIIコード以外にあてはまるかどうか調べてないが
例えば [![:cntrl:][:print:]] とかかな? 最悪一文字ずつ書けばいいだろう。
649デフォルトの名無しさん
2019/06/05(水) 17:15:11.07ID:xkVLsoK0650デフォルトの名無しさん
2019/06/05(水) 17:16:08.94ID:HgsnwJuZ >>649
何もおかしなところ無いんだが?
何もおかしなところ無いんだが?
651デフォルトの名無しさん
2019/06/05(水) 17:18:19.69ID:xkVLsoK0 正しく動くASCII判定のをどうぞ
652デフォルトの名無しさん
2019/06/05(水) 17:21:46.42ID:HgsnwJuZ あぁ、なにか言い返したかっただけかw
653デフォルトの名無しさん
2019/06/05(水) 17:27:42.29ID:xkVLsoK0 やはりRuby厨と変わらないw
正しく動くのを示せばいいだけでしょ、勝手にa-zだけじゃなく。それがちゃんとASCIIと判定できるなら
正しく動くのを示せばいいだけでしょ、勝手にa-zだけじゃなく。それがちゃんとASCIIと判定できるなら
654デフォルトの名無しさん
2019/06/05(水) 17:30:08.86ID:HgsnwJuZ 質問者じゃないお前と問答する意味ないよ
655デフォルトの名無しさん
2019/06/05(水) 17:31:24.15ID:xkVLsoK0 横槍はするが、自分に横槍すんなか。やはりRuby厨と変わらないw
656デフォルトの名無しさん
2019/06/05(水) 17:34:27.22ID:HgsnwJuZ よっぽど悔しかったんだろうなぁ(笑)
657デフォルトの名無しさん
2019/06/05(水) 17:37:01.79ID:xkVLsoK0658デフォルトの名無しさん
2019/06/05(水) 17:39:55.68ID:HgsnwJuZ だからお前と問答する必要はない話だよねw
質問者にヒントを出した。あとは自分でやるか、"質問者"が泣きつくかどうかだろ
なんでお前が泣きついてるんだ?えーんえーん(笑)
質問者にヒントを出した。あとは自分でやるか、"質問者"が泣きつくかどうかだろ
なんでお前が泣きついてるんだ?えーんえーん(笑)
659デフォルトの名無しさん
2019/06/05(水) 17:43:17.72ID:xkVLsoK0 ヒントを出した、泣きつくかどうか
よくそんな言葉吐けるな。ちょっと前のいつものヤツか、その子供のような最後といい、よく恥ずかしげもなく書けるなw
よくそんな言葉吐けるな。ちょっと前のいつものヤツか、その子供のような最後といい、よく恥ずかしげもなく書けるなw
660デフォルトの名無しさん
2019/06/05(水) 17:47:03.77ID:HgsnwJuZ やっぱりいつもの悔しい思いをしたやつだったかw
661デフォルトの名無しさん
2019/06/05(水) 17:51:21.47ID:oTS9vdrC いつものヤツだったのは正解らしいww
662デフォルトの名無しさん
2019/06/05(水) 17:56:56.88ID:HgsnwJuZ いつもの悔しい思いをしたやつってのは正解らしいwww
663デフォルトの名無しさん
2019/06/05(水) 17:58:17.08ID:oTS9vdrC は?お前は敵がいっぱいだなwww
664デフォルトの名無しさん
2019/06/05(水) 17:59:16.05ID:xpgfEjrk お前ほどじゃないよw
665デフォルトの名無しさん
2019/06/05(水) 18:01:04.69ID:ye33y5kG bash や zsh の場合、locale 依存なんだなぁ
$ bash -c 'LC_CTYPE=C; case 1 in *[![:cntrl:][:print:]]*) echo 'x';; *) echo 'y';; esac'
x
$ bash -c 'LC_CTYPE=ja_JP.UTF-8; case 1 in *[![:cntrl:][:print:]]*) echo 'x';; *) echo 'y';; esac'
y
bash で [:ascii:] を使う場合には locale は関係なし
$ bash -c 'LC_CTYPE=C; [[ 1 = *[![:ascii:]]* ]] && echo x || echo y'
x
$ bash -c 'LC_CTYPE=ja_JP.UTF-8; [[ 1 = *[![:ascii:]]* ]] && echo x || echo y'
x
$ bash -c 'LC_CTYPE=C; case 1 in *[![:cntrl:][:print:]]*) echo 'x';; *) echo 'y';; esac'
x
$ bash -c 'LC_CTYPE=ja_JP.UTF-8; case 1 in *[![:cntrl:][:print:]]*) echo 'x';; *) echo 'y';; esac'
y
bash で [:ascii:] を使う場合には locale は関係なし
$ bash -c 'LC_CTYPE=C; [[ 1 = *[![:ascii:]]* ]] && echo x || echo y'
x
$ bash -c 'LC_CTYPE=ja_JP.UTF-8; [[ 1 = *[![:ascii:]]* ]] && echo x || echo y'
x
666デフォルトの名無しさん
2019/06/05(水) 18:05:10.12ID:xpgfEjrk >>665
そうそう。だから面倒なので「ASCIIコード以外にあてはまるかどうか調べてない」し
「最悪一文字ずつ書けばいい」
あとbashやzshって限定しなくて良いよ。全部そうだから
> bash で [:ascii:] を使う場合には
[:ascii:]はPOSIXクラスじゃない
そうそう。だから面倒なので「ASCIIコード以外にあてはまるかどうか調べてない」し
「最悪一文字ずつ書けばいい」
あとbashやzshって限定しなくて良いよ。全部そうだから
> bash で [:ascii:] を使う場合には
[:ascii:]はPOSIXクラスじゃない
667デフォルトの名無しさん
2019/06/05(水) 18:12:43.44ID:9iVEjLSM なんで誰も求めていないPOSIXや速さにそんなにこだわるんだかな
>>665はちゃんと前段と分けて「bash で [:ascii:] を使う場合」とも言っている=「bashで」と言っているのに、なんでそうも自分は知ってるを出したいんだか
>>665はちゃんと前段と分けて「bash で [:ascii:] を使う場合」とも言っている=「bashで」と言っているのに、なんでそうも自分は知ってるを出したいんだか
668デフォルトの名無しさん
2019/06/05(水) 18:15:02.41ID:ye33y5kG ところが Ubuntu の dash(conform with the POSIX 1003.2 and
1003.2a specifications for the shell)は依存しないのよね…(上の例ではどちらも x を返す)
1003.2a specifications for the shell)は依存しないのよね…(上の例ではどちらも x を返す)
669デフォルトの名無しさん
2019/06/05(水) 18:15:24.53ID:oTS9vdrC 他人のレスを読めないのに妄想だけは
いつものことか
いつものことか
670デフォルトの名無しさん
2019/06/05(水) 18:15:31.51ID:xpgfEjrk 「求めていない」と明言していない以上、
「求めていない」なんてお前が断定するなってことだよ。
「求めていない」なんてお前が断定するなってことだよ。
671デフォルトの名無しさん
2019/06/05(水) 18:17:47.05ID:9iVEjLSM 読めない人だねえ
672デフォルトの名無しさん
2019/06/05(水) 18:21:58.87ID:9iVEjLSM673デフォルトの名無しさん
2019/06/05(水) 18:29:57.26ID:9iVEjLSM dashはプログラムでロケール(LC_CTYPE)の設定をしてない手抜きとかか。も考えられるね。どうであろうとデフォ= Cという
674デフォルトの名無しさん
2019/06/06(木) 17:44:19.74ID:KuydtzNG675デフォルトの名無しさん
2019/06/06(木) 19:05:13.64ID:f9T2ABl2 虚栄心の塊を助けるような真似はしたくはないな俺だったら
676デフォルトの名無しさん
2019/06/07(金) 08:04:35.63ID:rFfmCjQx 「助ける」って表現おかしくね?
だって誰も「助けてくれ」なんて言ってないじゃん。
既に質問者の「助けて」には親切な奴が答えてくれている途中だった。
正しく動くプログラムに勝手にケチ付けた挙句、なんの案も出さずに「間違ってる」だけしか言ってないよね。
だって誰も「助けてくれ」なんて言ってないじゃん。
既に質問者の「助けて」には親切な奴が答えてくれている途中だった。
正しく動くプログラムに勝手にケチ付けた挙句、なんの案も出さずに「間違ってる」だけしか言ってないよね。
677デフォルトの名無しさん
2019/06/07(金) 09:02:53.19ID:wbS/xMGA それな。
こっちは「こんな感じで作れますよー」って言ってるだけ
あとは簡単なので質問者でもできるだろう
(できないなら何かしらのレスをするだろう)
そこにいちいち、それは完璧に動かないって言うだけ。言うだけ厨w
こっちは「こんな感じで作れますよー」って言ってるだけ
あとは簡単なので質問者でもできるだろう
(できないなら何かしらのレスをするだろう)
そこにいちいち、それは完璧に動かないって言うだけ。言うだけ厨w
678デフォルトの名無しさん
2019/06/07(金) 14:05:05.10ID:tJklw1kZ 怪しいレスだなw
679デフォルトの名無しさん
2019/06/07(金) 23:38:40.76ID:sMkNqk8q680デフォルトの名無しさん
2019/06/12(水) 05:02:41.26ID:mlkAn7XZ シェルスクリプトのスレは以下に統合しました。
今後シェルスクリプトの話題はこちらで
くだらねえ質問はここに書き込め! Part 236
https://mao.5ch.net/test/read.cgi/linux/1556462911/
今後シェルスクリプトの話題はこちらで
くだらねえ質問はここに書き込め! Part 236
https://mao.5ch.net/test/read.cgi/linux/1556462911/
681デフォルトの名無しさん
2019/06/14(金) 01:38:30.44ID:ndORQo1H 某知恵袋で見かけた「ID非公開」さんの質問。
> Linuxのシェルスクリプトで質問です。
> リダイレクトの0は標準入力、1は標準出力、2は標準エラー出力。
> 0、1、2の他にも、3以上の番号もあるそうです。
> これら、3以上の番号を使った例を教えてください。
カテゴリマスター sle********さんの回答
> ファイルをオープンすれば3から順に使われるのだけど。
> 0,1,2の3つしか呼び出すプログラムには伝わらないのでできないのじゃないかな。
シェルスクリプトの話だということすら理解できてないなら回答するなよ。
シェルスクリプト リダイレクト exec
でググれよとか思ったけど、「ID非公開」という時点で相手にする価値が無いしなあ…
> Linuxのシェルスクリプトで質問です。
> リダイレクトの0は標準入力、1は標準出力、2は標準エラー出力。
> 0、1、2の他にも、3以上の番号もあるそうです。
> これら、3以上の番号を使った例を教えてください。
カテゴリマスター sle********さんの回答
> ファイルをオープンすれば3から順に使われるのだけど。
> 0,1,2の3つしか呼び出すプログラムには伝わらないのでできないのじゃないかな。
シェルスクリプトの話だということすら理解できてないなら回答するなよ。
シェルスクリプト リダイレクト exec
でググれよとか思ったけど、「ID非公開」という時点で相手にする価値が無いしなあ…
682デフォルトの名無しさん
2019/06/14(金) 02:49:59.61ID:IaHhNJVN なにをいいたいのだか
683デフォルトの名無しさん
2019/06/14(金) 14:10:08.67ID:BMAIfRwQ まあ確かにその説明は間違ってるけど
態々Yahoo知恵袋の回答を5chに持って来てまで叩くことあるかね……。
態々Yahoo知恵袋の回答を5chに持って来てまで叩くことあるかね……。
684デフォルトの名無しさん
2019/06/14(金) 22:48:51.07ID:0KPEzZXE そう言えば以前 flock コマンドを使ってここに書かれているような排他ロックを掛けるのを書いたことがある。
http://fj.hatenablog.jp/entry/2016/03/12/223319
で、リダイレクトはこの例のように 200 とか使ったのだが、しかし、これが使われていたらまともに動かないのではないかと思う。
かといって現在使われていないファイルデスクリプタを探す方法があるのかというと、Linux なら /proc/$$/fd/ 以下を見れば
良いんだろうが多分OSごとにやり方が違っていると思う。ということで開きファイルでスクリプタを探す方法は bash にあるんだ
ろうか? (bash でなくても良いが)。それとも探さずともシステムコールの open() 等のように空きを探し出して使ってくれる
みたいな書き方はできるんだろうか?
http://fj.hatenablog.jp/entry/2016/03/12/223319
で、リダイレクトはこの例のように 200 とか使ったのだが、しかし、これが使われていたらまともに動かないのではないかと思う。
かといって現在使われていないファイルデスクリプタを探す方法があるのかというと、Linux なら /proc/$$/fd/ 以下を見れば
良いんだろうが多分OSごとにやり方が違っていると思う。ということで開きファイルでスクリプタを探す方法は bash にあるんだ
ろうか? (bash でなくても良いが)。それとも探さずともシステムコールの open() 等のように空きを探し出して使ってくれる
みたいな書き方はできるんだろうか?
685デフォルトの名無しさん
2019/06/14(金) 22:49:46.28ID:0KPEzZXE 間違えた。開きじゃなくて空きだな。
686デフォルトの名無しさん
2019/06/14(金) 23:00:24.10ID:gXbRy3uY687デフォルトの名無しさん
2019/06/14(金) 23:05:28.80ID:gXbRy3uY Ruby のTempfile みたいな、一時ファイルでも作れば?
688デフォルトの名無しさん
2019/06/14(金) 23:21:07.72ID:kMuJFPPh689デフォルトの名無しさん
2019/06/18(火) 06:18:56.48ID:3nOE2mBA プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
690デフォルトの名無しさん
2019/06/18(火) 15:03:38.59ID:3Qr44a8e shebangの書き方について教えてください。
#!/bin/sh
# Next line is comment in Tcl, but not in sh... \
exec tclsh "$0" ${1+"$@"}
( 出典: https://rosettacode.org/wiki/Multiline_shebang )
コメント解釈の違いを利用して複数行に云々は分かります。
ただ気になった箇所が...
${1+"$@"}
これは一体どういう意味合いが込められてるのでしょうか?
Tcl 以外にも Perl とかでも同様の箇所があります。
引数 $1 が unsetなら null
そうでなければ "$1" "$2" "$3" . . . って事ですよね。
それって、ただ "$@" と書くのと違いが分かりません。
ちなみに公式推奨は
man tclsh8.5 までは "$@"
man tclsh8.6 からは ${1+"$@"} になっています。ただし説明文はそのままでした。
#!/bin/sh
# Next line is comment in Tcl, but not in sh... \
exec tclsh "$0" ${1+"$@"}
( 出典: https://rosettacode.org/wiki/Multiline_shebang )
コメント解釈の違いを利用して複数行に云々は分かります。
ただ気になった箇所が...
${1+"$@"}
これは一体どういう意味合いが込められてるのでしょうか?
Tcl 以外にも Perl とかでも同様の箇所があります。
引数 $1 が unsetなら null
そうでなければ "$1" "$2" "$3" . . . って事ですよね。
それって、ただ "$@" と書くのと違いが分かりません。
ちなみに公式推奨は
man tclsh8.5 までは "$@"
man tclsh8.6 からは ${1+"$@"} になっています。ただし説明文はそのままでした。
691デフォルトの名無しさん
2019/06/18(火) 15:38:35.82ID:3Qr44a8e 良い解説があったので解決しました。
https://www.in-ulm.de/~mascheck/various/bourne_args/
スクリプトに引数を与えない場合、
一部の古いシステムでは "$@" の解釈が
nothing (何もない) ではなく "" (空文字)になってしまうからだそうです。
https://www.in-ulm.de/~mascheck/various/bourne_args/
スクリプトに引数を与えない場合、
一部の古いシステムでは "$@" の解釈が
nothing (何もない) ではなく "" (空文字)になってしまうからだそうです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】日本代表MF 中村敬斗 ボリビア戦のスーパーゴールに「惚れるわ」「痺れる程のゴールこれでご飯何杯いけるのよ」 [阿弥陀ヶ峰★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
- 自閉症が「んなっしょい」と連呼するお🏡
- 日本人の海外旅行したきのマナーよくなったのはいつから
- へそグリグリ
- 結婚しないやつは異性は嫌いなの?
