シェルスクリプト総合 その36

■ このスレッドは過去ログ倉庫に格納されています
2021/02/25(木) 09:20:14.64ID:ZyJLXTlk
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

前スレ: シェルスクリプト総合 その35
https://mevius.5ch.net/test/read.cgi/tech/1606221440/

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】9
https://mao.5ch.net/test/read.cgi/linux/1607589861/
・Bashでプログラミング [転載禁止](c)2ch.net
https://mao.5ch.net/test/read.cgi/linux/1443885102/
・シェルスクリプト総合 その28
https://mevius.5ch.net/test/read.cgi/unix/1533154936/
・zsh その7
https://mevius.5ch.net/test/read.cgi/unix/1337844883/
・過去UNIXで使われていた ksh というシェルについて
https://mevius.5ch.net/test/read.cgi/unix/1582358403/
・【POSIX】UNIXプログラミング【BSD】 [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/unix/1443103705/
・おまえら! shell は何を使っているんですか?
https://mevius.5ch.net/test/read.cgi/unix/1012330865/
2021/03/29(月) 07:34:58.94ID:wK+S1L2g
>>119
実行ファイルには拡張子をつけないのが
"正しい" 作法ですが?
2021/03/29(月) 07:35:28.60ID:HXftsQaM
>>118
できるだけ互換なのを関連付けるのがベストプラクティスじゃないかな
2021/03/29(月) 07:36:04.54ID:wK+S1L2g
>>122
だから誰がつけるのよ?

シェルスクリプト配布時に作者が
どうやってつけるの?
2021/03/29(月) 07:36:41.97ID:HXftsQaM
>>121
どう考えても良くない習慣だと思うよ…
2021/03/29(月) 07:39:18.53ID:HXftsQaM
>>123
それはユーザー側でやるべきことだと思うけど、
sudo 要求できるならecho ... >>って手もあるかも
2021/03/29(月) 07:42:17.96ID:wK+S1L2g
>>124
良くない習慣だと言ってる人はだれもいません。
実際にディストリに含まれる実行プログラムで
実装言語の拡張子をつけてるプログラムは一つもありません
Ruby、Perl、Python、拡張子がついてますか?

そもそもさぁ、作者が 拡張子 .sh つけたとしても
じゃあ、これを何で動かせば良いのさ?

/bin/sh が bash だって言ってんだろ
2021/03/29(月) 07:50:37.48ID:T/NVAJfs
>>126
ちゃんとユーザーがどのインタプリタ(*sh、.py etc)で実行するべきか分かるように拡張子を付けるようにしましょう、って提言してる

そりゃインタプリタはインタプリタ名が自身を現してるから付ける必要は無いけど、解釈されるスクリプトには付けない理由は無いでしょう
パス決め打ちに依存するシバンより確実にインタプリタを指定できるわけだし
2021/03/29(月) 07:56:33.90ID:wK+S1L2g
>>127
> ちゃんとユーザーがどのインタプリタ(*sh、.py etc)で実行するべきか分かるように拡張子を付けるようにしましょう、って提言してる

少しは想像力ないのか?

作者が、.sh という拡張子を使って配布して
それをユーザーが、.bash に変更するようにしましょう
とお前が言っていて

そうするとファイル名変わるから、その .sh が
呼び出せなくなるだろ

ぐらいのこと思いつかんのか?
2021/03/29(月) 07:57:55.93ID:wK+S1L2g
訂正

そうするとファイル名変わるから、その .sh を
内部で呼び出すスクリプトが動かなくなるだろ
2021/03/29(月) 07:58:26.46ID:wK+S1L2g
だいたい「拡張子をつけないのが常識」だから
シバンというものがあるんだがな
2021/03/29(月) 07:59:44.04ID:qWZz7CCC
焦りすぎだ落ち着けw
2021/03/29(月) 08:04:34.67ID:wK+S1L2g
落ち着いてるw

そもそも拡張子ではどのインタプリタで動かすのかわからないという前提があるのに
今更何を言ってんだこいつって話
2021/03/29(月) 08:04:56.34ID:T/NVAJfs
>>128
拡張子は配布者が指定するんだよ、誤解を招いたみたいですまん

ここまでシバかれるとは思わんかった…
実行ファイルに拡張子付けるのが気に入らんなら、ファイル先頭付近のコメントにmime-typeを書いておけば検知されるわけだし、これなら既存の慣習と衝突しない落とし所としてどうだろ?
2021/03/29(月) 08:12:16.40ID:T/NVAJfs
>>132
zshくらい所謂shと違うと、.zshと付いてること多いけど、bashくらいの分かりにくい拡張だとshと付けたくなるのは分かるなあ
2021/03/29(月) 08:12:32.79ID:wK+S1L2g
>>133
> 実行ファイルに拡張子付けるのが気に入らんなら
気に入る気に入らないじゃなくて、拡張子をつけてはならない。
それともお前はwhichコマンドを、which.shに変更しろって言う気か?
2021/03/29(月) 08:17:34.76ID:T/NVAJfs
>>135
規格で決まってるコマンドはそりゃ付けちゃだめだよ
それ以外は気にいるか気に入らないかの問題でしょう
気にならないなら拡張子を付ける、気に入らないならmailcapが見つけられるようコメントにmimeを書く
2021/03/29(月) 08:19:14.60ID:wK+S1L2g
> それ以外は気にいるか気に入らないかの問題でしょう

違う。互換性の問題
実装言語を変えても、互換性は保たれなければならない
2021/03/29(月) 08:22:32.70ID:T/NVAJfs
>>137
なるほど、やっぱ拡張子はダメですね…アホなこと言ってました
コメント自動検知の方は何か見落としないですかね?
2021/03/29(月) 08:26:40.81ID:wK+S1L2g
OSの仕様として二行目にシバン2を作れって話?w
2021/03/29(月) 08:35:53.68ID:wK+S1L2g
結局はシバンを/usr/bin/env bashとかにすれば同じこと
2021/03/29(月) 08:40:37.26ID:T/NVAJfs
>>139
まさにその為にPOSIXへ導入された機構なのではないでしょうか?
mailと付いているのはメール方面で発展したからかな?と気になりますが
先頭付近に書いておけばrun-mailcapが検知してくれますよね、vimのモードラインみたいに先頭5行のような明確な判定法ってないんですかね?
ブラウザなんかはヒューリスティックで上手く決めてくれますけど、
2021/03/29(月) 08:50:40.11ID:T/NVAJfs
>>140
シバンが先頭占めてるので、GUIで適当にポチポチする人や、中身知らんけど取り敢えず./scriptで実行しちゃう人にはスルーされちゃうんですよね…
イマイチ強制力がないというか
win、linun、unix、macどこでも同じコマンド/クリックで同じように実行できるのは便利なんですが
2021/03/29(月) 08:58:49.98ID:wK+S1L2g
マジ意味不明
どんな手段でもいいからファイルの上の方に書いてある
なにかに従って実行ファイルを動かすツールをもってこい
話はそれからだろ
2021/03/29(月) 09:14:27.76ID:T/NVAJfs
>>143
いや、だからそれがrun-mailcapでは…

ところで、debianのman読むと、最終的にfileコマンドにフォールバックしてmime-typeを決定するとか非常に不吉な事書いてますね!?
うちのfileはシバンから推測(bashとshの区別など)してたと思うので、一旦mailcapを参照する事によるパス非依存性以外に利点がない気がしてきました…
決定アルゴリズムが統一されてないのが課題ですかね
winはもちろん違うでしょうし、unix系でもメーラ/ブラウザは固有の方法で決めてますし

第4のシバンを待つしかないのか!
2021/03/29(月) 09:16:56.36ID:wK+S1L2g
>>144
なら、run-mailcapでいいじゃん。

あとは何をしてほしいんだ?
run-mailcapが要求する何かをすれば終わりだろ
2021/03/29(月) 09:18:26.85ID:SSJ6OpUN
うだうだと意味不明だな
シバンは(低レベル)OS API(exec系)でサポートされてるんじゃなかったかな
mime-typeを仮にサポートしてるOSがあってもせいぜい高級APIでじゃないの

何を言いたいのかさっぱりわからん
2021/03/29(月) 09:30:51.89ID:T/NVAJfs
>>146
スレを眺めるに高級環境っぽいので、posixの話はアリかと思いまして
ただ、shを名乗っててもbusyboxとか組み込みだと無さそうな気がしますね(調べてない)
普段コマンドラインに住んでますがすごく便利ですよmailcap
ただ、色々突っ込んで貰ってenvも良さそうな気がしてきました
2021/03/29(月) 09:33:26.88ID:wK+S1L2g
>>147
だから、mailcapがやってくれるんだろ?
シェルスクリプトの作者がやることはなにもないじゃん
2021/03/29(月) 09:36:04.57ID:SSJ6OpUN
OSレベルでもなくツールで便利だったからかよ?
自分が便利でしかないことをうだうだうだうだとかよw
2021/03/29(月) 09:36:15.38ID:T/NVAJfs
>>148
シェルスクリプト書く人の話ですよ
実行環境を指定するのに、シバンでパス直打ちか、envか、mailcapか、ということです
2021/03/29(月) 09:38:32.42ID:wK+S1L2g
>>150
だからmailcapとかいう実行環境を指定するために
何をすれば良いのか聞いてるんだが
2021/03/29(月) 09:43:42.09ID:SSJ6OpUN
mailcapではないがmime-typeをサポートしてるOSがあるんだが。ある意味OSレベルでサポートしてる
作法が多分違うと思うが、それはそれでmime-typeにある意味固執して使うのかなあ?
めんどくささの方が上回りそうだけどw
2021/03/29(月) 09:44:13.43ID:T/NVAJfs
>>151
普及運動ですかね…
2021/03/29(月) 09:49:41.80ID:SSJ6OpUN
既存の色々を知らなさすぎるのに普及運動とかは無理だろうとしか思えない
OSレベルでサポートしてるOSのでもそんなことやってるヤツ見たことないしな
2021/03/29(月) 09:52:18.11ID:T/NVAJfs
>>154
はい、当たり前と思ってたら色々目からウロコで
また勉強して建設的な議論ができるようになったら戻ってきます、皆ありがとう
2021/03/29(月) 09:59:52.36ID:Hi4CyJOB
>>137
あるいは、実装の詳細をファイル名に漏出させないため、やな。
ユーザーには関係ないし、開発者のフリーハンドを大きく残しとけるしな。
2021/03/29(月) 10:01:28.74ID:wK+S1L2g
>>153
普及運動したってmailcapに機能が搭載されてなければ出来ないだろ

だから早くいえmailcapを使うとして
シェルスクリプト作者は何をスレば良いんだ?

実は何もしなくて良いんだろ?w
そもそもmailcap使っても出来ないことだからwww
2021/03/29(月) 10:02:18.72ID:/i/qkskJ
webだとみんなmimeでインタプリタ決めるしな
その方面で育つとカルチャーショック
2021/03/29(月) 10:03:55.77ID:SSJ6OpUN
>>158
そういう流れかあ。それっぽいな
2021/03/29(月) 10:05:03.53ID:wK+S1L2g
× webだとみんなmimeでインタプリタ決めるしな
○ ウェブサーバーだとみんなmimeでインタプリタ決めるしな

ウェブサーバー側の設定でやるから
スクリプトの作者は何もする必要がない
ウェブサーバー側に相当する何かを用意すればいい
2021/03/29(月) 10:09:45.64ID:SSJ6OpUN
読めてないんじゃないの。そんな具体的な話でないぞ
2021/03/29(月) 10:12:06.19ID:wK+S1L2g
そういう話だよ
2021/03/29(月) 10:13:08.06ID:SSJ6OpUN
まあ、ご自由に。話が繋がるとは思えないけど
さて
2021/03/29(月) 10:21:39.61ID:mn0uwvfX
自分で設定するのは面倒、色んな環境の初期設定が揃ってよろしくなってからかな
2021/03/29(月) 15:38:51.51ID:Hi4CyJOB
潔癖症とか完璧主義者とかがUNIX系のもろもろをキモく感じるのはわかる。
とくに最初のころ。

馴れてくると、だいたい気にならんくなってくる。
それがいいことかどうかはわからんけど。w
2021/03/29(月) 15:48:26.38ID:jeDqT5qX
>>126
うちのはデフォルトで/bin/shがzshになってるよ
2021/03/29(月) 17:08:18.30ID:wK+S1L2g
>>166
デフォルトで/bin/shがzshのシステムが有るなら教えて
聞いたこと無いぞ
2021/03/29(月) 17:44:52.06ID:jeDqT5qX
>>167
macOS Catalina
以前は手を入れないとダメだったらしいけど
現バージョンは最初からzshになってる
2021/03/29(月) 17:47:55.60ID:T/NVAJfs
めっちゃ右翼だなそりゃ…
仕方なく読む專だからわからんのだけど、zshもshっぽく振る舞うモードとかあるんじゃないのさすがに限度ってものがあると思うが
2021/03/29(月) 17:51:37.76ID:jeDqT5qX
>>169
単にGPL汚染だったからと言われてるけどApple側から説明はないので不明
bashのv4からGPL3になったのが理由だと思う
2021/03/29(月) 17:53:39.75ID:wK+S1L2g
>>168
> macOS Catalina

どーせそういうと思ったw
なんつーか、みんな基礎的な知識がないよな

あ、macOS Catalinaの/bin/shは(POSIXモードの)bash 3.2.57 だ
これからもずっと変わらんだろうよ
2021/03/29(月) 17:56:44.94ID:jeDqT5qX
>>171
現バージョンはzshになってるよ
確かめてみ
2021/03/29(月) 17:58:03.88ID:jeDqT5qX
なおBigSurは最初からzsh
もうbashには戻らんだろうね
2021/03/29(月) 18:01:27.34ID:wK+S1L2g
>>172
お前が確かめろや

/bin/shって入力して、プロンプトになんと表示されるか言ってみろ
2021/03/29(月) 18:04:28.54ID:1/gzKsrI
ログインシェル と /bin/sh は違うぞ
/bin/sh がなんなの確認してみ
2021/03/29(月) 18:06:21.42ID:jeDqT5qX
>>174
とっくに確かめてるって
BigSurはまだ更新してないから聞いただけだが最初からzsh
わからん人だね

そんに疑うなら自分でやってみ
2021/03/29(月) 18:07:44.45ID:jeDqT5qX
>>175
zshにリンクされてるね
2021/03/29(月) 18:07:48.03ID:wK+S1L2g
>>176
俺が聞いたのは、プロンプトになんて表示されるかだ
なぜ質問に答えられないのか?
それだけなんだが?
レスするよりタイプ文字は少ないだろ

ああ面倒だw

答えは、sh-3.2
bash 3.2の3.2だ

なにか言い返す言葉はあるか?
2021/03/29(月) 18:08:14.41ID:1/gzKsrI
>>176
確かめてないだろw
冷静にもう一度ちゃんと確かめてみ

>macOS Catalina
>以前は手を入れないとダメだったらしいけど
ってのからも明らかにログインシェル=/bin/shだと思ってるだろうし
2021/03/29(月) 18:10:30.37ID:wK+S1L2g
>>177
されてない

それどころかbashにもリンクされてなくて
ファイルサイズはbashとzsh(ほぼ同じぐらい)の1/10程度しかない

これは/bin/shがbashをベースにPOSIXに準拠するだけの機能に
減らしてビルドした縮小版だからだ
2021/03/29(月) 18:13:42.46ID:1/gzKsrI
>>177
嘘なのかw、マジでそうならなんかおま環くさい
/bin/shがコロコロ変わったら困るから(コロコロ変わる必要もないしな)、なんらか(chsh)でそうなるわけもなく、なんでそうなんか...嘘くさいww

BigSurはまだ更新してないからってことは、Catalinaか...尚更嘘くさい
そんな変なの捨ててクリーンインストールしなさいなww
2021/03/29(月) 18:14:08.54ID:wK+S1L2g
しかしmacOSの/bin/shが、bashやzshの1/10にまでサイズが減ってるとなると
本来のbashに比べて/bin/shは相当機能が削減されたbashだと思うけど何が減ったんだろう?
/bin/shはbashのインタラクティブシェルとしての機能を削っただけかな?
2021/03/29(月) 18:16:02.09ID:qWZz7CCC
チャーリー浜「...」
2021/03/29(月) 18:16:35.62ID:wK+S1L2g
そういやqiitaかなんかでmacOSの/bin/shを最新のbashに
アップデートしましょうとか書いてあった記事があったな
Apple版bashじゃなくてbash本家からビルドしてsudoでcpしてw
システム壊す気かって思ったwww
2021/03/29(月) 18:25:27.61ID:1/gzKsrI
>>183
そこまで書いたなら書いてよw
一瞥でなんのこっちゃと思った。それが狙いかも知れんが
2021/03/29(月) 18:30:46.99ID:wK+S1L2g
ふ、黙った所を見ると終わったかね?素人が俺様に敵うわけねーだろ
2021/03/29(月) 18:33:56.47ID:1/gzKsrI
お前はそれを冗談で言ってなさそうなとこがな
2021/03/29(月) 18:34:14.26ID:5I9+wJCt
動いてるなら必要十分だよな
bashはもうバージョン5だし、補完やらのAPIを外部に晒したのが成功して、対話モードが随分良くなった
2つ入れるのはアリだと思う
名前も念の為分けといた方がいいかもしれない(俺はサボったけど)
ただ、呪文のようなパラメータ置換をモリモリ実装してるのは頭おかしいと思う
外部コマンド使え
2021/03/29(月) 18:35:37.53ID:wK+S1L2g
> ただ、呪文のようなパラメータ置換をモリモリ実装してるのは頭おかしいと思う
> 外部コマンド使え

1/1000ぐらいにパフォーマンス下がるぞw
数値は適当だが
2021/03/29(月) 18:38:16.17ID:wK+S1L2g
外部コマンドはパフォーマンスが大幅に低下するだけじゃなく
改行をうまくあつかないという問題がある
変数には改行を入れられるが、外部コマンドだと行区切りとして扱われる
2021/03/29(月) 18:46:02.19ID:CpwX2Qd/
そういえばCatalinaだとこれ↓見ろってでますね
https://support.apple.com/kb/HT208050
2021/03/29(月) 18:59:51.55ID:wK+S1L2g
>>191
> macOS Catalina の Bourne 互換シェルとのスクリプトの互換性をテストするには、
> 「/var/select/sh」を「/bin/bash」「/bin/dash」または「/bin/zsh」に変更してみます。

それみてmacOSの/bin/shのサイズが1/10しかない理由がわかったw

man shすれば書いてあったが、macOSの/bin/shはシェル本体じゃなくて
シェル(/var/select/sh、デフォルトは/bin/bashへのシンボリックリンク)
を起動するためのコマンドなのか

どおりでstrings使ったらbashやzshといった文字が見つかるわけだ
/bin/sh をデフォルトのbashから別のシェルに変更したい場合は
シンボリックリンクを変更すれば出来るんだな

ってことはやっぱり単にPOSIXモードが有効になったというだけのbashなのかもな
2021/03/29(月) 19:55:41.76ID:1/gzKsrI
>>191
/bin/dash ってあるから、
次か次の次かで /bin/sh は bash を捨てて(流石に捨てるだろう3ベースのなんて。kshがまだあるから同じように残るか??) の dash になる可能性が大な感じ?
2021/03/29(月) 20:03:13.24ID:wK+S1L2g
>>193
bashからdashに変更すると互換性が壊れるからなぁ
まあそれをUbuntuがやってのけたから
互換性気にしないAppleならやるかもな

保守が続いてるdashに変更するか
それともAppleがbashをメンテンスし続けるか
後者でもほぼ修正はないんだから、大変ではないだろうな
2021/03/29(月) 20:07:19.27ID:KEZ/XNTe
>>189
そこまで気にしてなかった、利点はあるのね
しかしパースの曖昧さissueがどんどん上がってたり、使わない部分にまで影響が及ばないか不安になってくる
2021/03/29(月) 20:10:44.21ID:1/gzKsrI
Appleでメンテするのがめんどくさくなって捨てるのは定番
移行を即すためにも最後のあるんだろうし、dashをも入れてるのは 意味がある ことだろう
Appleの準備が終わったら&Appleが移行期間が終わりと見なしたら変わるだろうな
bashに固執することなんてないし
2021/03/29(月) 21:01:40.15ID:wK+S1L2g
bashは機能拡張とかいうレベルのメンテはしなくていいけど
もしかしたらこれから新たな脆弱性が見つかる可能性もあるからね
そうなると古いbashは公式にはメンテされない
Appleが独自で修正を入れる必要がある

/bin/sh(=/bin/bash)はAppleが手を入れてるからGPLv3だと困るとして
まったく手を入れなくていいとなった場合
macOSに新しいbashをバンドルすることはあるだろうか?

つまり古いbashはいずれにしても問題があるわけで更新しなければいけない
だから/bin/shをdashに変更した後、bash5をバンドルするかなってこと?
それが無理ならdashに変更したらbashを削除することも有り得そう
それを見越してzshに移行しろって言ってるのかもな
2021/03/29(月) 21:01:56.86ID:wK+S1L2g
つまりbash用スクリプトはmacOSで動かないわけで、
bashを入れるためにはHomebrewを使わなければならないわけで
そうするとbashからdash(POSIX準拠)に書き直す必要があるんじゃないか?w

HomebrewのインストーラーをRubyからBashに書き直しました!
https://itchyny.hatena
blog.com/entry/2020/03/03/100000

これどれくらいbash依存してるんだろう?
2021/03/29(月) 21:13:02.60ID:wK+S1L2g
Homebrewのインストーラー
https://raw.githubusercontent.com/Homebrew/install/master/install.sh

ざっと見てみたが、結構長いな
配列使ってるところがread -n 1が少し厄介だな

POSIX準拠させるよりもzshで動くようにしたほうがいいのかもしれんな
しかしこれどうやってテストしたんだろうか
2021/03/29(月) 21:49:47.52ID:wK+S1L2g
ふむ read -n 1 = getchのPOSIX準拠コードはあるようだ

https://qiita.com/miminashi/items/ad060c43c130581b412a

getch() {
old=$(stty -g)
stty raw -echo min 0 time 1
printf '%s' $(dd bs=1 count=1 2>/dev/null)
stty $old
}

じゃああとは配列の置き換えが面倒なだけだな
2021/03/30(火) 22:27:21.29ID:jfNjkEti
こうなったら世界唯一のリードオンリー言語、applescriptで書き直すしかないな
2021/03/31(水) 11:33:02.43ID:AtIsL56M
arrayも使えないのは正直つらい

コマンドだけど魔改造でびっくらこいたのはlinux版のcolumn.1(kernel.org配布なんで公式のはず)だなあ
linuxなのに-hも--helpも受け付けないbsd版使ってたわ
--jsonとか--treeとかもはやcolumnの域を超越してる
2021/03/31(水) 12:20:25.54ID:ekNiD538
配列なんていらんと思ってるけど、何に使ってるか聞いていい?
できれば難しいケースでw
2021/03/31(水) 12:34:19.85ID:AtIsL56M
ごめん、単語分割めんどいので全部突っ込みます
2021/03/31(水) 12:37:32.99ID:ekNiD538
>>204
https://github.com/koalaman/shellcheck/wiki/SC2086

こうやりたいのなら
options="-j 5 -B"
make $options file

こうやればいい
make_with_flags() { make -j 5 -B "$@"; }
make_with_flags file


配列はやっぱり、いらんのよなぁ
2021/03/31(水) 12:43:15.98ID:ekNiD538
単語分割は値にスペースが入ってるときに困るんで基本使わないよ。
その上で配列いらんと思ってる。>>205に書いた通り
2021/03/31(水) 16:10:08.25ID:AtIsL56M
>>205
ああwikiにもデバッグにもお世話になってるわshellcheck様々

まあそうなんだけど、逆に割りたいところでは割りたい時にも文字列より便利なんだよなコマンド組み立てとか

そもそも俺のは乱用であって、配列本来の用途は添字で引くことでしたね!
mktempしてpaste key valueを流し込み、
grep ^key^I |cut -f2-
で引くとかぱっと思いつくけど、汚え
なんか良い方法あったらご教授頂きたい
2021/03/31(水) 16:20:02.26ID:AtIsL56M
まずmktempじゃなくて文字列変数でいいな、最大サイズとか規格にありそうだけどとりあえず
2021/03/31(水) 16:54:44.20ID:0ggCFJWv
配列は普通キーと値を追加して育てるので'key sep val '>>で追記
二度同じキーを入れると複数引っかかるので
tac |grep -m1あるいはtail -n1
とりあえずkey sep>>で空文字が返るでよしとする
でもunsetと区別できない
セパレータはタブよりヌル文字にあたりにしたほうが無難そう

ボロボロ出てくるんで出直してきます…
2021/03/31(水) 20:23:49.38ID:rlnsgVLR
>>207-209
ちゃんと読んでないけど

コマンド組み立てならこんな感じ
[ "$FLAG" = "on" ] && set -- -f "$@"
[ -e "$FILE" ] && set -- --file "$FILE" "$@"
cmd "$@"

添字で引きたいならこんな感じ
set -- a b c
echo $2

grep ^key^I |cut -f2- なら、次のようにすればgrepもcutも使わなくても出来るよ
while IFS="$TAB" read -r key value; do
echo "$value"
done

一般的なプログラムでは配列あったほうがいいけど
シェルスクリプトでやるような内容で配列なんかいらない
ただみんなシェルスクリプトを雰囲気でやってて知らないだけ
2021/03/31(水) 20:37:35.81ID:fnN7hvaV
でも、PerlもPythonもないけど、いれるほどでもない用事のときには、Bashくらいが適当かつ充分だったりするからね。
2021/03/31(水) 20:43:11.59ID:rlnsgVLR
へー、fi って終了って意味だったのか。勉強になった

https://www.dict.com/%E3%82%AB%E3%82%BF%E3%83%AB%E3%83%BC%E3%83%8B%E3%83%A3%E8%AA%9E-%E6%97%A5%E6%9C%AC%E8%AA%9E/fi

fi, -na [fi]
終了, 終止, 終わり, おしまい, 最後, 結末, 終結
2021/03/31(水) 20:44:51.45ID:rlnsgVLR
>>211
そのBashくらいが〜が俺にとっては、Dash(POSIX準拠)で十分なんだよね
2021/03/31(水) 21:13:09.30ID:4SvaIgPh
まじかよ、じゃあesacもすげー意味に違いないな
2021/03/31(水) 21:16:15.45ID:1zeQu1PP
https://acronyms.thefreedictionary.com/ESAC
2021/03/31(水) 22:31:27.28ID:rlnsgVLR
実際fiって映画の最後のfinから来てるのかもな
2021/04/01(木) 03:14:03.54ID:B5PjUTjB
ここが教養スレだ!
2021/04/01(木) 14:47:29.53ID:9tfGPqCh
シェルスクリプトじゃないけど、質問。
makeで、ターゲット実行が成功しても失敗しても、最後に後始末みたいな処理をさせる方法はない?
bashならtrap ... EXITでできるけど。
2021/04/01(木) 15:17:09.43ID:Hb/UV5K1
https://stackoverflow.com/questions/28597794/how-can-i-clean-up-after-an-error-in-a-makefile
やることは同じだな
2021/04/01(木) 21:35:25.25ID:HbnIL0Hw
>>219
ああ、pipefailの意味をやっと理解したわ
bashのinfo何度も通読してるはずなんだけど、last commandのステータスを返すって当たり前じゃね、ってスルーしてた…
限りなくバグに近い仕様ってやつか
2021/04/01(木) 22:02:03.77ID:B5PjUTjB
互換性オプションはマニュアル読んでも例を見ないと分からない物が多いと思う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況