[過去ログ]
シェルスクリプト総合 その31 (1002レス)
シェルスクリプト総合 その31 http://mevius.5ch.net/test/read.cgi/tech/1565446670/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
893: デフォルトの名無しさん [sage] 2019/10/17(木) 17:04:24.98 ID:z1/RyPhF ファイルの存在確認なら、-fを使えばいいだろ? http://mevius.5ch.net/test/read.cgi/tech/1565446670/893
895: デフォルトの名無しさん [sage] 2019/10/17(木) 17:05:47.88 ID:z1/RyPhF あ、ディレクトリに *.txt があるかどうかってことか? http://mevius.5ch.net/test/read.cgi/tech/1565446670/895
898: デフォルトの名無しさん [sage] 2019/10/17(木) 17:10:05.98 ID:z1/RyPhF getopts vs getopt だけどさ、 BSDにおいてgetoptのメリットって何? BSD版のgetoptはロングオプションに対応してないし、 引数にスペースが入ったらうまく行かないし 使い勝手悪いと思うんだが。 もしかして最初に作られたのがgetoptで それを改良してgetoptsがシェルビルトインとして作られた。 (その後GNU版getoptが改良され、getoptsよりも便利になった) という流れだったりするの? http://mevius.5ch.net/test/read.cgi/tech/1565446670/898
901: デフォルトの名無しさん [sage] 2019/10/17(木) 17:13:24.29 ID:z1/RyPhF >>896 アスタリスクを使うと、シェルが解釈して、 例えば、 ls * だと、 ls file1 file2 file3 file4 って実行したのと同じことになるんだぞ。 lsコマンドの中からはアスタリスクが使われてるかどうかなんてわからない。 そしてダブルクォートで括ると、lsコマンドの中から引数は "*" という文字列が渡されたようになるんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1565446670/901
903: デフォルトの名無しさん [sage] 2019/10/17(木) 17:19:49.73 ID:z1/RyPhF >>899 それだめ。 shellcheck使ってみ、エラーになる。 shellcheck において && || みたいな三項演算子風な使い方は func && VALUE=ok || VALUE=ng という書き方(変数代入)のみ認められる。 func && foo || bar は認められない。 なぜかと言うと、 1. func が 正常終了して 2. foo が 異常終了すると 3. bar が 実行されるから 変数代入に限れば必ずVALUE=okは正常終了するから、 この書き方に限って許されてる。 だから、一応fooが必ず正常終了するものであれば、使えなくはないけど 静的解析ではそれを知ることが不可能なので、shellcheckはエラーになる。 あともう一つ、barが異常終了したとき、&& || だと $?はエラーになるが、 ifで書けばfi終了後、$? は正常終了になってるという違いもある。 だからset -eでの挙動が変わる。 http://mevius.5ch.net/test/read.cgi/tech/1565446670/903
904: デフォルトの名無しさん [sage] 2019/10/17(木) 17:21:53.83 ID:z1/RyPhF もちろん、&& 単独、もしくは || 単独で 使うならば問題ない。 func && foo とか func || bar ならOK http://mevius.5ch.net/test/read.cgi/tech/1565446670/904
906: デフォルトの名無しさん [sage] 2019/10/17(木) 17:33:24.48 ID:z1/RyPhF あー、やっぱりそうなんや https://en.wikipedia.org/wiki/Getopt https://en.wikipedia.org/wiki/Getopts getoptは1980年頃つくられた。初期のgetoptは低機能 その改良として getopts が1986年にBourne shellに実装されたらしい。 その後、getopts (Solaris) と getopt (GNU) それぞれ違うコマンドで ロングオプションがサポートされ どちらでもないBSD(macOS含む)では、従来どおり 低機能な getopt と それを少し改良した getopts があるが どちらもロングオプションはサポートしてないと http://mevius.5ch.net/test/read.cgi/tech/1565446670/906
907: デフォルトの名無しさん [sage] 2019/10/17(木) 17:37:12.84 ID:z1/RyPhF >>905 だからダブルクォートで括るからいかんのや ls "$dir/tmp/" * ".txt" これが正解(スペースは目立たせるために入れただけ) この書き方ダサいよなw ちなみに古いシェル(poshだっけ?)でこれがうまく行かない バグがあるのだが、まあ誰も気にしないわなw http://mevius.5ch.net/test/read.cgi/tech/1565446670/907
908: デフォルトの名無しさん [sage] 2019/10/17(木) 17:40:52.02 ID:z1/RyPhF getopts (Solaris) でロングオプションがサポートされたってシェルなんだ?って思ったら、 Solarisでは/usr/bin/getoptsが存在するのか・・・ 紛らわしいな https://docs.oracle.com/cd/E26924_01/html/E29112/getopts-1.html http://mevius.5ch.net/test/read.cgi/tech/1565446670/908
909: デフォルトの名無しさん [sage] 2019/10/17(木) 17:43:27.80 ID:z1/RyPhF あ、いや /usr/bin/getopts もあるにはあるが、libcのgetopt()実装が拡張されたから それを使ってるBourne Shellでも使えるようになったのか > getopts (Solaris enhanced) > As a result, this new feature was also available in the built-in command getopts of the Bourne Shell. http://mevius.5ch.net/test/read.cgi/tech/1565446670/909
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.053s