シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ: シェルスクリプト総合 その27(https://mevius.5ch.net/test/read.cgi/unix/1525337663/)
探検
シェルスクリプト総合 その28
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/07/24(火) 11:01:16.36ID:r0TJj2hB2018/08/02(木) 11:35:22.97ID:N9CdGDK2
bashでは0(真)か0以外(偽)となりますが、
Cスタイルのforループの条件判定のところにi==0( i>=0とするところを間違えてやってしまいました)
とやったら一回もループに入らなかったのですが、
Cスタイルのforループの中では0は偽なのでしょうか?
forループは下のループです。(chinachu-mirakurun-sleep scriptでスキップした番組の時に録画動作に入らない
ように改造したものです)
for ((i = ((${#IsSkipArray[@]} -1)) ; i>=0 ; i--)); do
if [ "${IsSkipArray[i]}" = "false" ]; then
(( RecTime = ${RecTimeMsec[i]} / 1000 ))
elif [ "${IsSkipArray[i]}" = "true" ]; then
:
fi
done
Cスタイルのforループの条件判定のところにi==0( i>=0とするところを間違えてやってしまいました)
とやったら一回もループに入らなかったのですが、
Cスタイルのforループの中では0は偽なのでしょうか?
forループは下のループです。(chinachu-mirakurun-sleep scriptでスキップした番組の時に録画動作に入らない
ように改造したものです)
for ((i = ((${#IsSkipArray[@]} -1)) ; i>=0 ; i--)); do
if [ "${IsSkipArray[i]}" = "false" ]; then
(( RecTime = ${RecTimeMsec[i]} / 1000 ))
elif [ "${IsSkipArray[i]}" = "true" ]; then
:
fi
done
2018/08/02(木) 11:45:13.93ID:N9CdGDK2
ちょっと訂正します。
間違えたコードはi==0ではなく、条件式にi=0としていました。
だから毎回判定するごとにiに0が代入されてループに入れなかったんですが、
お聞きしたかったのは0が偽だからループに入れなかったのか?ということでした。
条件式に代入式を持ってくる時点で素人丸出しなんですが、どうかご容赦ください。
間違えたコードはi==0ではなく、条件式にi=0としていました。
だから毎回判定するごとにiに0が代入されてループに入れなかったんですが、
お聞きしたかったのは0が偽だからループに入れなかったのか?ということでした。
条件式に代入式を持ってくる時点で素人丸出しなんですが、どうかご容赦ください。
2018/08/02(木) 12:23:00.77ID:N9CdGDK2
ttps://mywiki.wooledge.org/ArithmeticExpression
ここのサイトを見たらfor (( ; ; ))もArithemetic Expression(算術式)で、
However, when evaluating an arithmetic expression, C language rules (0 is false, anything else is true) apply.
と書いてありました。Cの原則が適用されるようですね。自己解決したっぽいです。
どうもお騒がせしました。
ここのサイトを見たらfor (( ; ; ))もArithemetic Expression(算術式)で、
However, when evaluating an arithmetic expression, C language rules (0 is false, anything else is true) apply.
と書いてありました。Cの原則が適用されるようですね。自己解決したっぽいです。
どうもお騒がせしました。
2018/08/03(金) 14:17:14.85ID:htH9kPBS
2018/08/03(金) 14:39:56.40ID:nG7YYTv9
そんなんsakuraだってあるぞ
2018/08/03(金) 14:58:08.23ID:htH9kPBS
>ファイル名に、ダブルクォートが入っている
ファイル名に、! が入っていたら、どうなる?
テレビ番組の録画で「何々!」「何々!!」みたいな番組名が、ファイル名になる場合
ファイル名に、! が入っていたら、どうなる?
テレビ番組の録画で「何々!」「何々!!」みたいな番組名が、ファイル名になる場合
2018/08/03(金) 15:01:48.95ID:TC+4ZTQW
>>80
感嘆符が特殊文字になるのってインタラクティブなときだけじゃね?
感嘆符が特殊文字になるのってインタラクティブなときだけじゃね?
2018/08/03(金) 17:12:49.75ID:5qGFGeHO
>>80
こういうのって何言いたいのかわからんな。「問題」でも出してるのか??
こういうのって何言いたいのかわからんな。「問題」でも出してるのか??
2018/08/03(金) 17:30:20.61ID:TDL18VXl
>>80
それこそ、自分で何とかしろって感じだな
それこそ、自分で何とかしろって感じだな
2018/08/03(金) 18:47:15.20ID:TC+4ZTQW
いやだから,感嘆符が特殊文字になるのはインタラクティブなときのみじゃないの?
2018/08/03(金) 18:49:00.35ID:BX8VumvQ
bashあんまり使わんからなあ
86デフォルトの名無しさん
2018/08/03(金) 20:02:10.32ID:X+nM2ZWl ! を特別扱いするシェルを使っているかどうかの問題ではないかな。
OSやファイルシステムが特別扱いしているってこともあり得なくもないが。
UNIX系OSだと / しか特別扱いしてないよね。
OSやファイルシステムが特別扱いしているってこともあり得なくもないが。
UNIX系OSだと / しか特別扱いしてないよね。
8780
2018/08/03(金) 20:31:20.88ID:htH9kPBS Linux 板で、テレビ番組名に、!!! みたいなものが入っていて、
それがファイル名になる場合に、バグるって言ってたから
! は、エスケープも出来ないとか
それがファイル名になる場合に、バグるって言ってたから
! は、エスケープも出来ないとか
2018/08/03(金) 20:50:55.07ID:TDL18VXl
他の環境ではNGの可能性があるということを考えると
怪しい文字は極力ファイル名に使わないようにしてる。
ある意味思考停止だけどw
CD-R焼く時、使える文字がフォーマットによりまちまちで、
ものすごい複雑だったことを思い出したわ。
ロミオとジョリエットwとか、ロックリッジとかあったなぁ。
怪しい文字は極力ファイル名に使わないようにしてる。
ある意味思考停止だけどw
CD-R焼く時、使える文字がフォーマットによりまちまちで、
ものすごい複雑だったことを思い出したわ。
ロミオとジョリエットwとか、ロックリッジとかあったなぁ。
2018/08/03(金) 20:52:13.47ID:u/asMYJG
余計な手間を省くのは正攻法だしいんじゃね
2018/08/03(金) 21:25:09.26ID:5qGFGeHO
>>87
だから、なにを言っているのかわからんてww
だから、なにを言っているのかわからんてww
2018/08/03(金) 21:36:10.72ID:8YejLfKY
2018/08/03(金) 21:38:01.51ID:5qGFGeHO
>>86
特殊文字って場合によりでしかないよな。特殊文字だから必ずバグる(?)なんてないし
シェルというか引数として受けたコマンドがって感じかなあ。bash自体がスクリプト中の引数を含めたコマンド文字列に特殊文字があっても何もしない/しないようにできるし
ID:htH9kPBSが言っているのは、ID:TC+4ZTQW が言っているコマンドラインでのヒストリ(参照)処理に引っかかる場合で、シェル「スクリプト」の問題ではないだろう
特殊文字って場合によりでしかないよな。特殊文字だから必ずバグる(?)なんてないし
シェルというか引数として受けたコマンドがって感じかなあ。bash自体がスクリプト中の引数を含めたコマンド文字列に特殊文字があっても何もしない/しないようにできるし
ID:htH9kPBSが言っているのは、ID:TC+4ZTQW が言っているコマンドラインでのヒストリ(参照)処理に引っかかる場合で、シェル「スクリプト」の問題ではないだろう
2018/08/03(金) 22:13:10.45ID:5qGFGeHO
スクリプトとして關係ないが、超シンプルにしての
$ ls '!'
ls: !: No such file or directory
まあ、そうだな
$ ls !
ls: !: No such file or directory
ほう
$ ls "!"
-bash: !: event not found
なんでやねんっ!ってとこではあるな
コマンドラインでも ! を打たなきゃファイル名がんなの入っていてもだし、! を含めたファイル名なんぞを打たなきゃでも ' でくくればいいんじゃね
$ ls '!'
ls: !: No such file or directory
まあ、そうだな
$ ls !
ls: !: No such file or directory
ほう
$ ls "!"
-bash: !: event not found
なんでやねんっ!ってとこではあるな
コマンドラインでも ! を打たなきゃファイル名がんなの入っていてもだし、! を含めたファイル名なんぞを打たなきゃでも ' でくくればいいんじゃね
2018/08/03(金) 22:47:23.99ID:TC+4ZTQW
だからすごく単純な話で
$ cat ./hstex.sh
#! /usr/bin/env bash
case $- in
(*H*)
echo enabled
;;
(*)
echo disabled
;;
esac
$ ./hstex.sh
disabled
こういうことでしょ?
つまりシェルスクリプトになってるときbashはヒストリ展開を既定で行わないから
エスケープを考える必要はないの。
$ cat ./hstex.sh
#! /usr/bin/env bash
case $- in
(*H*)
echo enabled
;;
(*)
echo disabled
;;
esac
$ ./hstex.sh
disabled
こういうことでしょ?
つまりシェルスクリプトになってるときbashはヒストリ展開を既定で行わないから
エスケープを考える必要はないの。
2018/08/03(金) 22:52:05.62ID:8YejLfKY
はぁ、シェル「スクリプト」かどうかの問題じゃないんだってば
>>93はevent not foundってでなかったんで
考えるのメンドーなんでぐぐって
https://qiita.com/Qutjl/items/6e0056853c94011d245b のネタパクるけどさ
$ ruby -e "puts 'Hello, World!'"
-bash: !': event not found
はい、たしかにそうなりますね。
テキストエディタで「puts 'Hello, World!'」という内容のcode.txtファイルを作成する
$ cat code.txt
puts 'Hello, World!'
$ a=$(cat code.txt)
$ echo "$a"
puts 'Hello, World!'
変数 a に先程の文字列を入れました
$ ruby -e "$a"
Hello, World!
はい、エラーになりません。
これはシェルスクリプトが特殊なんじゃねーよ。
C言語で、ソースコードに"\n"と書いてある文字列をprintfした時と
\nという文字列が入っている変数をprintfした時の挙動と一緒だろうが
プログラミングの基礎やで。ソースコードをパースするときの処理かどうかの違い
>>93はevent not foundってでなかったんで
考えるのメンドーなんでぐぐって
https://qiita.com/Qutjl/items/6e0056853c94011d245b のネタパクるけどさ
$ ruby -e "puts 'Hello, World!'"
-bash: !': event not found
はい、たしかにそうなりますね。
テキストエディタで「puts 'Hello, World!'」という内容のcode.txtファイルを作成する
$ cat code.txt
puts 'Hello, World!'
$ a=$(cat code.txt)
$ echo "$a"
puts 'Hello, World!'
変数 a に先程の文字列を入れました
$ ruby -e "$a"
Hello, World!
はい、エラーになりません。
これはシェルスクリプトが特殊なんじゃねーよ。
C言語で、ソースコードに"\n"と書いてある文字列をprintfした時と
\nという文字列が入っている変数をprintfした時の挙動と一緒だろうが
プログラミングの基礎やで。ソースコードをパースするときの処理かどうかの違い
2018/08/03(金) 23:09:12.00ID:5qGFGeHO
2018/08/03(金) 23:09:28.23ID:TC+4ZTQW
えぇ……
もしかして俺が間違ってるのかと不安になるほど自信満々な書き方だなw
もしかして俺が間違ってるのかと不安になるほど自信満々な書き方だなw
2018/08/03(金) 23:11:06.77ID:5qGFGeHO
2018/08/03(金) 23:14:28.27ID:5qGFGeHO
>>97
まあ...気にすんな。「ナニ」か違う(?)と思ったのだろう。よくわからんけど
まあ...気にすんな。「ナニ」か違う(?)と思ったのだろう。よくわからんけど
100デフォルトの名無しさん
2018/08/03(金) 23:28:02.17ID:h174pTLw 若者はヒストリー置換を知らないんだなあと感じいる俺はオッサン。
ヒストリー置換は対話的な入力にしか影響しないから、
スクリプトにするときは気にしなくていいよ。
ヒストリー置換は対話的な入力にしか影響しないから、
スクリプトにするときは気にしなくていいよ。
101デフォルトの名無しさん
2018/08/04(土) 02:05:18.25ID:j+kw9Zam102デフォルトの名無しさん
2018/08/04(土) 03:08:34.02ID:ddNokTrS イミフ
103デフォルトの名無しさん
2018/08/04(土) 03:15:50.13ID:ddNokTrS 初見イミフ、よく読んでもやっぱりイミフw
なんか問題点を勘違いしているでしょ
>>94のcaseからesacをコピペってみて実行してみ。たぶんそういう文脈での「シェルスクリプトになってるときは〜」だと思うぞ=間違ってはないと思うぞ
何を問題にしてんの?「インタラクティブシェル上でも変数を""で囲えば同じなのに」って
なんか問題点を勘違いしているでしょ
>>94のcaseからesacをコピペってみて実行してみ。たぶんそういう文脈での「シェルスクリプトになってるときは〜」だと思うぞ=間違ってはないと思うぞ
何を問題にしてんの?「インタラクティブシェル上でも変数を""で囲えば同じなのに」って
104デフォルトの名無しさん
2018/08/04(土) 03:24:02.15ID:XmDLxyoB なんでこんなに丁寧に教えてやらんと理解できんのか
>>62の話だろ
> だから、ディレクトリパス・ユーザー名とか、
> システムで使うものに、半角空白を入れたら、ダメ
>
> シェルスクリプトを書いている奴が、変数を" " で囲んでいないと、バグるから
ヒストリー展開はスクリプトだと既定で無効だが、
それ以前にファイル名にスペース入ってたりするから、
変数はダブルクォートでくくるのは当たり前なんだよ。
shellcheckすればデフォルトで指摘される項目
変数はダブルクォートでくくればいいって言ってんのに
今度は「ファイル名にダブルクォートが入っていたら?」
「ビックリマークが入っていたら?」とか言い出してんだろ
そ・れ・も「変数をダブルクォートでくくればいい」で終わりつってんだろ
ダブルクォートでくくればヒストリー展開が有効であっても
ファイル名に!が含まれてようが関係ない
>>62の話だろ
> だから、ディレクトリパス・ユーザー名とか、
> システムで使うものに、半角空白を入れたら、ダメ
>
> シェルスクリプトを書いている奴が、変数を" " で囲んでいないと、バグるから
ヒストリー展開はスクリプトだと既定で無効だが、
それ以前にファイル名にスペース入ってたりするから、
変数はダブルクォートでくくるのは当たり前なんだよ。
shellcheckすればデフォルトで指摘される項目
変数はダブルクォートでくくればいいって言ってんのに
今度は「ファイル名にダブルクォートが入っていたら?」
「ビックリマークが入っていたら?」とか言い出してんだろ
そ・れ・も「変数をダブルクォートでくくればいい」で終わりつってんだろ
ダブルクォートでくくればヒストリー展開が有効であっても
ファイル名に!が含まれてようが関係ない
105デフォルトの名無しさん
2018/08/04(土) 03:25:51.10ID:XmDLxyoB106デフォルトの名無しさん
2018/08/04(土) 03:26:21.86ID:ddNokTrS 違うよ。>>80の話だけだぞ?
107デフォルトの名無しさん
2018/08/04(土) 03:28:41.06ID:ddNokTrS ! と " は別の問題
話の流れをよめ...ってw だめだこりゃ
話の流れをよめ...ってw だめだこりゃ
108デフォルトの名無しさん
2018/08/04(土) 03:57:51.51ID:ZE1/UEds109デフォルトの名無しさん
2018/08/04(土) 04:07:16.79ID:ddNokTrS110デフォルトの名無しさん
2018/08/04(土) 07:02:26.79ID:fp3S0oAr ヒストリ置換知らないのはゆとり
111デフォルトの名無しさん
2018/08/04(土) 08:42:45.49ID:Zm4mz9Pa 俺はゆとり世代より下だがずっと指摘してたぞ(>>81)
そういう決め付けやめろ
そういう決め付けやめろ
112デフォルトの名無しさん
2018/08/04(土) 15:19:02.62ID:EGr8asH9 やはりIPも入れたほうがいいかね
113デフォルトの名無しさん
2018/08/04(土) 15:19:27.32ID:EGr8asH9 IPじゃねーやワッチョイ
114デフォルトの名無しさん
2018/08/06(月) 08:36:00.23ID:/d0+B2Ty ファイルやディレクトリを引数に取り、その許可属性を返すコマンドってありますか。
少なくともPOSIX Utilityにはないと分かっています。
期待する動作はそのコマンドの名前をownとして
$ own /some/file
-rwxrwxr-x
というような具合です。
少なくともPOSIX Utilityにはないと分かっています。
期待する動作はそのコマンドの名前をownとして
$ own /some/file
-rwxrwxr-x
というような具合です。
115デフォルトの名無しさん
2018/08/06(月) 09:07:09.56ID:BzDkzOUM lsすりゃ済むのにunix的なセンスでそんなコマンドは作らないよ
116デフォルトの名無しさん
2018/08/06(月) 09:23:02.61ID:Q3wSzLhg ls
それで満足できないなら作れ、さすがにそれくらいできるだろ
それで満足できないなら作れ、さすがにそれくらいできるだろ
117デフォルトの名無しさん
2018/08/06(月) 09:25:30.08ID:RuHjlTsU >>114
stat -c '%A' /some/file
stat -c '%A' /some/file
118デフォルトの名無しさん
2018/08/06(月) 09:26:53.13ID:4JbBAPy3119デフォルトの名無しさん
2018/08/06(月) 09:29:30.92ID:4JbBAPy3 うはっw NGワードで引っ掛かってあれこれ変えてる内に回答が二つ書かれてたw
120デフォルトの名無しさん
2018/08/06(月) 09:43:00.91ID:9v8Yooys >>117でわかるのに、unix的なセンスとか、ワロえる。
センスないのはむしろ。ぷぷぷw
センスないのはむしろ。ぷぷぷw
121デフォルトの名無しさん
2018/08/06(月) 10:15:49.41ID:BzDkzOUM なんか嘲笑してるつもり?
122デフォルトの名無しさん
2018/08/06(月) 11:45:03.11ID:jTWGCXc0123デフォルトの名無しさん
2018/08/06(月) 15:01:42.52ID:/d0+B2Ty stat -c '%A'
↑すばらしいです。ありがとうございました。
↑すばらしいです。ありがとうございました。
124デフォルトの名無しさん
2018/08/06(月) 20:56:55.63ID:Z/jXU7Rj125デフォルトの名無しさん
2018/08/10(金) 03:53:11.11ID:5eVCbRBd OpenWrtでこんなの見つけた。何処がオリジナルだろう?
物自体はバイナリだけどシェルスクリプトと親和性が高い(?)
JSONのパースと生成の方法のアイデアとして
https://wiki.openwrt.org/doc/devel/packages/jshn
Library for parsing and generating JSON from shell scripts
こんなふうに出力される
$ jshn -r '{"a":1, "b":2, "c": [1,2,3], "d": {"A":1}}'
json_init;
json_add_int 'a' 1;
json_add_int 'b' 2;
json_add_array 'c';
json_add_int '0' 1;
json_add_int '1' 2;
json_add_int '2' 3;
json_close_array;
json_add_object 'd';
json_add_int 'A' 1;
json_close_object;
物自体はバイナリだけどシェルスクリプトと親和性が高い(?)
JSONのパースと生成の方法のアイデアとして
https://wiki.openwrt.org/doc/devel/packages/jshn
Library for parsing and generating JSON from shell scripts
こんなふうに出力される
$ jshn -r '{"a":1, "b":2, "c": [1,2,3], "d": {"A":1}}'
json_init;
json_add_int 'a' 1;
json_add_int 'b' 2;
json_add_array 'c';
json_add_int '0' 1;
json_add_int '1' 2;
json_add_int '2' 3;
json_close_array;
json_add_object 'd';
json_add_int 'A' 1;
json_close_object;
126デフォルトの名無しさん
2018/08/10(金) 08:46:11.76ID:bLDrGgRY >>125
jq(1)が定番では?
jq(1)が定番では?
127デフォルトの名無しさん
2018/08/10(金) 11:19:27.53ID:zsXdw2zN128デフォルトの名無しさん
2018/08/10(金) 11:44:23.91ID:r84RRSaO129デフォルトの名無しさん
2018/08/10(金) 12:48:42.64ID:vqUG5YbC おかしな人の言い分だな、確かにw
130デフォルトの名無しさん
2018/08/10(金) 12:52:37.04ID:EBuB6o8O パイプで繋いで使えるようにってことかな
131デフォルトの名無しさん
2018/08/10(金) 13:42:12.09ID:ndPpyRQZ おかしな人がケチつけてたのって何年も前じゃん
132デフォルトの名無しさん
2018/08/10(金) 14:53:48.86ID:19uTC1v8 ああ、某原理主義者のことか
133デフォルトの名無しさん
2018/08/10(金) 14:57:29.03ID:xNR7R3k1 ポジックス
134デフォルトの名無しさん
2018/08/10(金) 15:54:52.38ID:ndPpyRQZ でもあの人の言うことなんて聞いてらんないよね。こっちは宗教で食ってるわけじゃないんだからさ。
作って見せたツールだって痒いところに手が届かない部分は
「そんなのはそもそもこうこうであるべきで必要ない」みたいな感じでほっぽってるし
作ってマウント取って射精後スッキリになったら全くメンテなんてしないし。「各人個別で改修・メンテしろ」ってことなんだろうけど、
こんなの個人の便利ツール止まりで世界中の不特定多数の共有便利ツール・知識にはなり得ないよ。
作って見せたツールだって痒いところに手が届かない部分は
「そんなのはそもそもこうこうであるべきで必要ない」みたいな感じでほっぽってるし
作ってマウント取って射精後スッキリになったら全くメンテなんてしないし。「各人個別で改修・メンテしろ」ってことなんだろうけど、
こんなの個人の便利ツール止まりで世界中の不特定多数の共有便利ツール・知識にはなり得ないよ。
135デフォルトの名無しさん
2018/08/10(金) 15:59:32.13ID:xNR7R3k1 何やってる人か知らんが、それはそれでいんじゃないの?
頼まれずに作ったツールの公開なんてオナニーそのものやろ
頼まれずに作ったツールの公開なんてオナニーそのものやろ
136デフォルトの名無しさん
2018/08/10(金) 17:01:03.73ID:r84RRSaO 誰かが例の記事のはてブで言ってたけど,ああいう人も必要だとは思う。
というか正直俺はプログラマじゃない(つまりコーディングで飯食ってるわけじゃない)ので,
ああいう考え方にはすごく興味があるし,実際研究室の管理シェルスクリプトをPOSIX準拠で書き直したりもしてる。
しかし繰り返すがプログラマにとっては邪魔な存在なんだろうなとは感じる。
というか言い方がキツすぎる。
というか正直俺はプログラマじゃない(つまりコーディングで飯食ってるわけじゃない)ので,
ああいう考え方にはすごく興味があるし,実際研究室の管理シェルスクリプトをPOSIX準拠で書き直したりもしてる。
しかし繰り返すがプログラマにとっては邪魔な存在なんだろうなとは感じる。
というか言い方がキツすぎる。
137デフォルトの名無しさん
2018/08/10(金) 17:59:17.69ID:q2LOavXt だが、それがいい。
138デフォルトの名無しさん
2018/08/12(日) 14:51:04.97ID:EQS0DV6K #!/bin/bash
for i in {0..5}; do
n=`date +%Y-%m-%d_%H '-d ${i} hour ago'`
echo $n
done
ループで時間を1時間ずつ過去にして表示したいんだけど実行すると
date: ` ${i} hour ago' は無効な日付です
て表示されます。
助け船おねがいします
for i in {0..5}; do
n=`date +%Y-%m-%d_%H '-d ${i} hour ago'`
echo $n
done
ループで時間を1時間ずつ過去にして表示したいんだけど実行すると
date: ` ${i} hour ago' は無効な日付です
て表示されます。
助け船おねがいします
139デフォルトの名無しさん
2018/08/12(日) 15:45:28.66ID:CtXb4bgk >>138
シングルクオートだと変数が、展開されない気がすダブルクォートにしてみて
シングルクオートだと変数が、展開されない気がすダブルクォートにしてみて
140デフォルトの名無しさん
2018/08/12(日) 17:45:18.75ID:EQS0DV6K141デフォルトの名無しさん
2018/08/13(月) 00:38:00.83ID:z6+TJcGX "-d ${i} hour ago" の部分が -d "${i} hour ago" ではないのに何故大丈夫なのかと思ったが、
短いオプションだからパラメータと繋がってても大丈夫ってことだったんだな。
短いオプションだからパラメータと繋がってても大丈夫ってことだったんだな。
142デフォルトの名無しさん
2018/08/14(火) 19:59:14.84ID:0dSYKDxo 上のやり取りをみてふと思いたって実験してみると
GNU dateではフォーマットにCSIとかに代表されるANSI制御綴りを指定できるけど
BSD dateでは無理だな。
POSIXではこの二つのどちらが正しい実装なのかはよく分からんが
個人的な意見としてはBSD dateのほうが堅牢で,GNU dateのほうが柔軟だとは思う。まあ当然すぎる事実だけどw
GNU dateではフォーマットにCSIとかに代表されるANSI制御綴りを指定できるけど
BSD dateでは無理だな。
POSIXではこの二つのどちらが正しい実装なのかはよく分からんが
個人的な意見としてはBSD dateのほうが堅牢で,GNU dateのほうが柔軟だとは思う。まあ当然すぎる事実だけどw
143デフォルトの名無しさん
2018/08/15(水) 02:35:15.09ID:sxh1cciH BSD date の仕様が分からないけど、標準出力が端末とは限らないし
指定そのまま出すほうが正しいんじゃないかな
指定そのまま出すほうが正しいんじゃないかな
144デフォルトの名無しさん
2018/08/15(水) 13:56:33.60ID:/R99sNfj 標準出力がなんのかんけーがあんのー?
145デフォルトの名無しさん
2018/08/15(水) 16:29:17.30ID:fSWxnCwv かんけーし
146デフォルトの名無しさん
2018/08/17(金) 03:06:26.97ID:DWhhxT1h 単純な文字列置換ってどうしたら良いですかね?
sedつかうとメタ文字の置換で困るんです
sedつかうとメタ文字の置換で困るんです
147デフォルトの名無しさん
2018/08/17(金) 03:42:44.91ID:l9m154d6 その辺りが楽なperlでいいんじゃない?
シェルスクリプトから使っちゃいけないというわけじゃないし
シェルスクリプトから使っちゃいけないというわけじゃないし
148デフォルトの名無しさん
2018/08/17(金) 04:16:11.31ID:DWhhxT1h149デフォルトの名無しさん
2018/08/17(金) 04:55:42.82ID:xP9ZimWn awk
150デフォルトの名無しさん
2018/08/17(金) 04:56:29.20ID:DWhhxT1h awkに正規表現じゃない文字列置換命令ってありましたっけ?
151デフォルトの名無しさん
2018/08/17(金) 06:24:27.95ID:/a+SCakG Ruby が簡単
152デフォルトの名無しさん
2018/08/17(金) 06:38:46.91ID:eWaVkn5S >>151
perlが無いならrubyも無いでしょ
perlが無いならrubyも無いでしょ
153デフォルトの名無しさん
2018/08/17(金) 07:03:28.31ID:DWhhxT1h はい、rubyもないし、pythonもなし、nodeもないです
154デフォルトの名無しさん
2018/08/17(金) 08:18:50.56ID:/a+SCakG Ruby をインストールすれば?
漏れは、WSL で、Rubyを入れているけど
漏れは、WSL で、Rubyを入れているけど
155デフォルトの名無しさん
2018/08/17(金) 08:24:08.77ID:RTbKyx/W156デフォルトの名無しさん
2018/08/17(金) 08:34:23.82ID:vhwq6spf viは?
157デフォルトの名無しさん
2018/08/17(金) 08:36:24.83ID:RTbKyx/W 手動で置換は嫌です
158デフォルトの名無しさん
2018/08/17(金) 08:40:03.28ID:vhwq6spf viはスクリプト組めるでしょ
159デフォルトの名無しさん
2018/08/17(金) 08:44:27.28ID:TmUZ5Zjz パターン文字列をsedで置換しちゃうとか(GNU sed の場合)
$ pattern='foo[1]'
$ sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
foo[2]
$ pattern='foo[1]'
$ sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
foo[2]
160デフォルトの名無しさん
2018/08/17(金) 08:49:02.25ID:vhwq6spf 脳みそが解読を拒否してる
161デフォルトの名無しさん
2018/08/17(金) 08:53:02.98ID:xP9ZimWn162デフォルトの名無しさん
2018/08/17(金) 08:56:35.86ID:RTbKyx/W >>158
スクリプトの実行はできましたが、 %s/〜/〜/g
だと〜に/が入っていた時に困ります。
〜には何が入るかわかりません。
あとviは標準入力から読み込めませんでした
できれば標準入力から読み込みんで標準出力に出力したいです。
ちなみにviのバージョンです
# vi -H
These features are available:
Pattern searches with / and ?
Last command repeat with .
Line marking with 'x
Named buffers with "x
Some colon mode commands with :
Settable options with ":set"
Signal catching- ^C
Job suspend and resume with ^Z
Adapt to window re-sizes
BusyBox v1.28.3 () multi-call binary.
Usage: vi [OPTIONS] [FILE]...
Edit FILE
-c CMD Initial command to run ($EXINIT also available)
-R Read-only
-H List available features
スクリプトの実行はできましたが、 %s/〜/〜/g
だと〜に/が入っていた時に困ります。
〜には何が入るかわかりません。
あとviは標準入力から読み込めませんでした
できれば標準入力から読み込みんで標準出力に出力したいです。
ちなみにviのバージョンです
# vi -H
These features are available:
Pattern searches with / and ?
Last command repeat with .
Line marking with 'x
Named buffers with "x
Some colon mode commands with :
Settable options with ":set"
Signal catching- ^C
Job suspend and resume with ^Z
Adapt to window re-sizes
BusyBox v1.28.3 () multi-call binary.
Usage: vi [OPTIONS] [FILE]...
Edit FILE
-c CMD Initial command to run ($EXINIT also available)
-R Read-only
-H List available features
163デフォルトの名無しさん
2018/08/17(金) 09:00:22.48ID:RTbKyx/W >>159
GNU sedじゃないからだめなんでしょうね
# pattern='foo[1]'
# sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
-ash: syntax error: unexpected redirection
ちなみにsedの--versionと--helpです。
# sed --version
This is not GNU sed version 4.0
# sed --help
BusyBox v1.28.3 () multi-call binary.
Usage: sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-i[SFX]] [-nrE] CMD [FILE]...
-e CMD Add CMD to sed commands to be executed
-f FILE Add FILE contents to sed commands to be executed
-i[SFX] Edit files in-place (otherwise sends to stdout)
Optionally back files up, appending SFX
-n Suppress automatic printing of pattern space
-r,-E Use extended regex syntax
If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).
GNU sedじゃないからだめなんでしょうね
# pattern='foo[1]'
# sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
-ash: syntax error: unexpected redirection
ちなみにsedの--versionと--helpです。
# sed --version
This is not GNU sed version 4.0
# sed --help
BusyBox v1.28.3 () multi-call binary.
Usage: sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-i[SFX]] [-nrE] CMD [FILE]...
-e CMD Add CMD to sed commands to be executed
-f FILE Add FILE contents to sed commands to be executed
-i[SFX] Edit files in-place (otherwise sends to stdout)
Optionally back files up, appending SFX
-n Suppress automatic printing of pattern space
-r,-E Use extended regex syntax
If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).
164デフォルトの名無しさん
2018/08/17(金) 09:16:35.01ID:RTbKyx/W165デフォルトの名無しさん
2018/08/17(金) 09:16:49.96ID:TmUZ5Zjz >>163
ああ、bash じゃなくて ash だから here string("<<<") が使えないのね…
# echo 'foo[1]' | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
こんな感じかな。
ああ、bash じゃなくて ash だから here string("<<<") が使えないのね…
# echo 'foo[1]' | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
こんな感じかな。
166デフォルトの名無しさん
2018/08/17(金) 09:33:56.45ID:xP9ZimWn167デフォルトの名無しさん
2018/08/17(金) 09:48:06.80ID:RTbKyx/W >>166
なんかプラスが入った時おかしいっすね
GNU sed
$ pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]
$ pattern='a+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]+
busybox sed
# pattern='+'
# echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
sed: bad regex '\+': Repetition not preceded by valid expression
なんかプラスが入った時おかしいっすね
GNU sed
$ pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]
$ pattern='a+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]+
busybox sed
# pattern='+'
# echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
sed: bad regex '\+': Repetition not preceded by valid expression
168デフォルトの名無しさん
2018/08/17(金) 09:57:27.72ID:TmUZ5Zjz169デフォルトの名無しさん
2018/08/17(金) 09:58:49.05ID:TmUZ5Zjz あ、ごめん勘違いしてた。ちょっと考えてみる
170デフォルトの名無しさん
2018/08/17(金) 10:03:14.53ID:RTbKyx/W そう。何が問題なのかよくわからないw
171デフォルトの名無しさん
2018/08/17(金) 10:13:01.82ID:TmUZ5Zjz あれ?でもさ、
pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]
入力が '+' でパターン文字列も '+' だから foo[2] に置換されるのは正しいんじゃないかな?
でもまぁ、GNU sed で -r オプション付けると `+` 記号がメタキャラクタになるから、付けない場合は
`+` を考慮する必要はなかったのね…
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
こっちの方が良いみたい。
pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]
入力が '+' でパターン文字列も '+' だから foo[2] に置換されるのは正しいんじゃないかな?
でもまぁ、GNU sed で -r オプション付けると `+` 記号がメタキャラクタになるから、付けない場合は
`+` を考慮する必要はなかったのね…
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
こっちの方が良いみたい。
172デフォルトの名無しさん
2018/08/17(金) 10:13:20.76ID:5I+JCiH1173デフォルトの名無しさん
2018/08/17(金) 10:18:32.56ID:RTbKyx/W174デフォルトの名無しさん
2018/08/17(金) 10:20:29.64ID:RTbKyx/W だから要するに + はエスケープしたらダメってことなのか?
単純な文字列置換って正規表現置換よりも簡単な処理なのに
どれも面倒くさいなぁw
単純な文字列置換って正規表現置換よりも簡単な処理なのに
どれも面倒くさいなぁw
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 渡邊渚「性を売ってるくせに」批判に反論 幻滅「これが日本の現状だよなー」「『渾身の下着!』というような意味でやってない」★2 [Ailuropoda melanoleuca★]
- ひろゆき氏、日中対立に 「結局、人口というのは国力なので。10億人以上いる国に、1億2000万人で対抗可能であるというのが間違い」 [冬月記者★]
- 「おこめ券」でJAを救済したいだけ…税金4000億円で"史上最高値のコメ"を買わせる農水大臣とJAの癒着ぶり [バイト歴50年★]
- 渡邊渚さん脅迫か 写真集に包丁置く写真投稿 30代女性書類送検 渡邊さん「外に出るのも怖く身の危険を感じる」 [ひかり★]
- 【千葉】会社で58歳女性刺される 殺人未遂容疑で同僚の中国籍の男(39)逮捕 女性死亡 いすみ市 [ぐれ★]
- 【格闘技】朝倉未来「てめえ、今からやってやろうか?」 前代未聞のブチギレ! 関東最大級ギャングの元ボスと一触即発 [冬月記者★]
- 元グラドルで国会議員の佐々木りえ(43)、夫にサンドイッチのパンを頼んだら6枚切りを買ってきてキレそうに→Xで絡まれさらにキレる [808139444]
- お茶会聯合自治政府 貳
- 【速報】人気ミュージシャン、高市首相のアーティスト支援表明にブチギレ「自分で潰しておいてどの口が…一刻は早く辞任しろ!」 [339712612]
- 【風向き】ヤバい!高市が導入を検討する「防衛特別所得税」、ネトウヨらもまさかの反対の大合唱。。さすがに国民を舐めすぎたか? [219241683]
- お茶会聯合自治政府
- jcコテだけどお前らの家庭環境と家族構成が知りたい
