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

レス数が950を超えています。1000を超えると書き込みができなくなります。
2021/10/05(火) 22:49:30.91ID:KsbWuyFp
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
・「POSIX原理主義」「ユニケージ」「USP研究所」はPOSIXとUnixを曲解し
間違ったシェルスクリプトを広めている宗教です。洗脳されないようにしてください。

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

関連スレ
・【Bash】Windows Subsystem for Linux【WSL】11
https://mao.5ch.net/test/read.cgi/linux/1627507889/
・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/
2022/10/22(土) 01:01:42.39ID:w0vCAaPV
よし、要らんな
2022/10/22(土) 01:20:59.11ID:ZKLK2IoP
echo 成功を祈るだべぇ >|"$0"
2022/10/24(月) 09:33:19.96ID:P2J4rO7b
パスワード生成
cat /dev/random | tr -dc '[:alnum:]' | fold -w 16 | grep '[[:digit:]]' | grep '[[:upper:]]' | grep '[[:lower:]]' | head -n 1
2022/10/24(月) 13:21:29.09ID:LufpLpQ3
>>891
そんなアホみたいなことしてないでmkpasswd使え
893デフォルトの名無しさん
垢版 |
2022/10/31(月) 23:10:15.52ID:Sg749A95
"c:\test\e01"
の文字列をkshで書く際に
"c:\\test\\e01"
とすると"c:\test□01"と化けてしまうのですが、
どう記載したら良いでしょうか。
2022/10/31(月) 23:54:05.96ID:8d/Em0+h
そもそもコマンドは何?勝手にc風エスケープ受け付けるコマンドと仮定するけど

\tにはちゃんと\効いてるのに、よりマイナーな\eをesc文字と解釈するのが気持ち悪いな

とりあえず'(シングルクオート)でそのまま囲めば?
2022/11/01(火) 00:00:32.67ID:XWm3usXf
初歩的過ぎ、あるいはkshでは違ったらごめんだけど

"\\"はコマンド関係無しにシェルが\と解釈する
後はコマンドが解釈する

という前提はok?
896デフォルトの名無しさん
垢版 |
2022/11/05(土) 13:54:01.79ID:tvTqkbo5
"#!"機能の有無の検出って、シェルでどう書くんだっけ?
2022/11/05(土) 13:57:55.08ID:0q4aURph
"#!"機能の有無ってなんだよ?
2022/11/05(土) 13:58:30.81ID:0q4aURph
#!/usr/bin/perl の場合を例にして言ってみて
2022/11/05(土) 14:14:53.38ID:0pCmU1l8
>>896
実際に呼んでみれば?

echo '#! /usr/bin/echo true' >hash-bang-p
chmod u+x hash-bang-p

if ./hash-bang-p |col1; then
# assume implicit invocation available.
else
# don't rely on the mechanism,
# explicitly specify interpreter.
fi

的な感じで
2022/11/05(土) 14:20:51.30ID:0pCmU1l8
ごめんcol1じゃダメそうだわ
機構が有効なら./hash-bang-pは文字列を返して、そうでなければ返さない(例:sh ./hash-bang-p)
事に注意してよしなに
901896
垢版 |
2022/11/05(土) 14:29:19.32ID:l9nmx+fu
>>897
SVR2とかは>>898みたいに書いても、単にコメントとして処理されてたんです
(この例だとperlは実行されない)

>>899
やぱし呼んでみるしかないか…
2022/11/05(土) 14:33:42.19ID:0q4aURph
SVR2なんか今時使うの?
もうとっくの昔にサポート切れで脆弱性とかあるのでは?
2022/11/05(土) 14:43:53.71ID:0pCmU1l8
>>901
#!機構で呼んでくれないけど、#!指定のインタプリタを呼びたいケース
例えば実装スクリプト言語が不明/システムにより異なる場合等
とりあえずパースすれば?

`echo "$(head -1 unknown-script)" |tr -d '!'#`

的な感じで
汚ないというのは、まあ容赦してくれ
2022/11/05(土) 14:45:39.00ID:0pCmU1l8
伝統的にスクリプト実装だけど、効率のためバイナリに置き換えられてる場合も多々あるので、fileの結果を見た方がいいかも
2022/11/05(土) 14:52:27.83ID:0pCmU1l8
分かりにくいと思うので補足>>903

例えばunknown-scriptが先の./hash-bang-pなら
中のコマンド置換は文字列
/usr/bin/echo true
を返す

外のコマンド置換でこれがコマンドとして実行され
true
が返る(はず)
2022/11/05(土) 14:55:56.67ID:0q4aURph
System V Release 2は1984年4月にリリースされたって書いてあるんだが
38年前かー。ファミコンのパックマンの発売年じゃん。
初代スーパーマリオの一年前のUNIX
そんなの使ってるなんてなんか可哀想w
2022/11/05(土) 14:58:08.92ID:0q4aURph
>>903
SVR2ならBourne Shellだからそれ動かないんじゃね?
908896
垢版 |
2022/11/05(土) 14:58:35.52ID:W/fi7cAS
>>902
そういやperl4のConfigureって判別してたよなって思い出して、
っぃ…
2022/11/05(土) 15:10:30.65ID:0q4aURph
>>908
そんな古代のOS対応するだけ無駄、さっさと切り捨てろ
昭和じゃねー。もう平成だぞ。
2022/11/05(土) 15:15:49.65ID:CaYWlfee
単に$?を見るのはダメだったの?
本質はOSがshebangをサポートしてるかどうかの判定だから、やってみて戻り値見る行為以外ないんじゃないかな
>>903みたいのはzshが内部でexecve()の失敗後にやってるけど、判定が主題ならそのconfigureのやりかたを見てみたいな
2022/11/05(土) 15:18:31.87ID:0pCmU1l8
>>907
そうか、というか仮に動いても正しく動く保証は全く無いな…
長さ制限を除いても、#!機構のパースは一般にシェル言語と全く関係がないので(特に引数やクオート)

例えばlinuxの#!機構は引数は一つまでなので
#! /usr/bin/env -Scommand\_arg1\_arg2
みたいなものが書かれる
perl等も(独自の)似たようなワークアラウンド機構を持ってたはず

そのままシェル言語として通用する文字列が得られるのは
#! /path/to/command alnumonly
くらいな気がする
2022/11/05(土) 15:24:38.61ID:0q4aURph
その頃のUNIXだったら/bin/shじゃなくて/usr/bin/shとかも
考慮しないといけないのでは?
2022/11/05(土) 15:40:46.08ID:EHQev3W6
>>912
そこまでワークアラウンドを積み重ねるくらいなら、もう潔く決め打ちで"分かりやすく"失敗して、ユーザーに適宜直してもらうべきだな

自分で言うのもアレだけど、>>903にSVR改修、パスサーチ、言語毎の#!機構用ワークアラウンドに対するワークアラウンド…
を加えていけば、一体どんなモンスターになるやら
2022/11/05(土) 15:43:33.14ID:0q4aURph
>>913
うん、で今は#!に対応してないUNIXなんてないんだから
やる意味ないよねって結論になる。
2022/11/05(土) 17:48:14.73ID:/GinkP0r
変な工夫を凝らして変死するのが最も厄介

>>899
必要かどうかはさておき少しだけ読みやすく
(hash-bang-p)
#!/usr/bin/true
false # or exit 1

if ./hash-bang-p; then
...
916896
垢版 |
2022/11/05(土) 21:40:31.60ID:/vhGZAk/
>>910
perl5のConfigure出てきた
github.com/Perl/perl5/blob/blead/Configure
これのsharpbangって変数のあたり

でも、これ自体はmetaconfigが自動生成したやつだしな…
917896
垢版 |
2022/11/05(土) 22:42:53.63ID:/vhGZAk/
>>899
-P Convention………lisperの『味』だぜ……
2022/11/05(土) 22:51:42.45ID:CaYWlfee
metaconfigのソース見ると実際にスクリプトを実行して戻り値で判定してるね
919896
垢版 |
2022/11/06(日) 16:23:58.52ID:6IpVpf3a
UNIX板のシェルスクリプトスレの方がいいのだろうか…

>>908
レトロゲームをやりこむのに近い行為なのかもです
2022/11/06(日) 16:29:03.77ID:JyiC8cnE
レトロゲーム本体がないのにどうやって動作確認するの?
2022/11/08(火) 22:58:25.15ID:6COcByZR
UNIX板って機能してるのかな
見ておいでよ
922デフォルトの名無しさん
垢版 |
2022/11/10(木) 16:24:36.94ID:klH1mu/P
UNIX板は過疎板
2022/11/10(木) 16:54:57.94ID:eyva6wLj
macOSはUNIXだけど専用板あるし
UNIXなんてもう使われてない
BSDももうおしまい
2022/11/10(木) 18:44:31.43ID:Tf4g3bvk
ユーザにとってはな
2022/11/10(木) 19:50:54.97ID:eyva6wLj
>>924
あとサーバー系もUNIXは終わってるよね
ハードウェアを作っているところが
ドライバを非公開にして、ハードウェアを
販売したいってところでしか使われてない
2022/11/11(金) 02:08:38.50ID:/ObTgJox
一般ユーザにとってはな
無知晒すのもいい加減にしろよ
2022/11/11(金) 02:58:35.00ID:M0nB3cbT
残念ながらUNIXのシェアは0.1パーセントとかなのよね
https://w3techs.com/technologies/details/os-unix
2022/11/11(金) 12:25:02.65ID:dkXTOyUr
そのページはWebサーバ限定で、しかもUNIXは80.3%使用されてるって書いてあるけど…

仮にlinuxとBSDを抜いたとしても、
0.803×0.533=約40%は使われてる計算
2022/11/11(金) 15:42:15.81ID:KNn1/gM5
>>928
unknownだろそれ
アホなのか?
2022/11/11(金) 17:55:17.80ID:35BXJdBb
>>929
アホはお前だろ。英語一文字も読めないのかよ
2022/11/11(金) 19:48:26.89ID:KNn1/gM5
どこの英語一文字の話をしているのか言ってみ
932デフォルトの名無しさん
垢版 |
2022/11/11(金) 22:25:10.60ID:aBiT4hkd
どっちもどっち
unknownはlinux含むunix
linuxを除くunixがそこに何%含まれてるかは分からない
だからunixのシェアが0.1%とも40%ととも言えない
2022/11/11(金) 23:07:06.98ID:KNn1/gM5
どっちかわからんなら
分かってるのと同じ割合を割り当てろよ
2022/11/11(金) 23:15:32.87ID:yV2t16iO
基盤なunixは変わらず生き続ける
linuxは傍流でしかない、仕様策定上は。bashismで見られるようにw
linux使ってるだけのlinux中だろな。中学生な
2022/11/12(土) 00:47:02.31ID:Cj/ueztB
>>934
分かった分かった。

Linuxは生き残る
死ぬのはBSD UnixとSystemV Unix

このように言えってことだろ
分かってるって
2022/11/12(土) 13:16:01.01ID:ndWlPBfM
頭悪い反発
2022/11/12(土) 19:15:00.71ID:2bWZf5Rs
あるディレクトリの下にサブディレクトリがいくつかあって、それぞれのサブディレクトリの中にはファイルがいくつかずつある
このサブディレクトリ群内のファイルを対象に作成日時が新しいものから順に任意の個数を選んでサブディレクトリ名を含んだパス名を出力する場合どう書く?
2022/11/12(土) 19:49:20.63ID:Cj/ueztB
どう書く?どう書く?ど~う~書く?
君ならどう書く~?
2022/11/12(土) 20:04:50.63ID:Zr4m37Yp
Perlで書く。
適材適所。
2022/11/12(土) 21:33:57.14ID:Cj/ueztB
適材適所ならシェルスクリプトの方が適してるでしょ?
2022/11/12(土) 23:40:47.58ID:2bWZf5Rs
自己解決した findのprintfオプションとsortとsedで出来た ども
942デフォルトの名無しさん
垢版 |
2022/12/15(木) 20:10:29.53ID:xAICKfjX
bashの実行中上書き動作ってどういう時に役立つの?
2022/12/15(木) 20:30:31.26ID:ckKyI6FD
Unix/Linuxは昔から実行中にファイルを書き換えられる
Windowsとは違う
2022/12/15(木) 21:57:10.51ID:RzHoZPr/
超Geekぐらいだろな、役立つように使おうとするのは
機能としてではなく限られたメモリ上でどうするかでそうなったんじゃね
>>943
バイナリの正当な(?)実行ファイルもそうなのか?
あり得ないけど=今時のUnix系OSはそうはならない
2022/12/15(木) 22:14:44.89ID:a9LNvh7S
UNIX/Linuxにはアドバイザリロックしかないんだから
実行中にファイルは書き換えられる
バイナリ実行ファイルは、スクリプト言語とは違って
最初にメモリに全部読み込むってだけ
2022/12/15(木) 23:02:40.00ID:DSr8QAEc
そもそも、シェルやしな。
インタラクティブが前提なら必要なとこまでしか読んどらんやろから、自然とそうなるんちゃうか。
2022/12/15(木) 23:11:24.42ID:a9LNvh7S
インタプリタっていうのは元々そういうもんだと思うけどね
一行ごとに解釈するものなんだから、必要ないところまで読み込む必要がない

最近のスクリプト言語は最初にファイル全体を解釈して
内部的にバイナリにしているような気がするけど
それもファイル単位で動的にファイルを読み込むこともあるし
2022/12/15(木) 23:16:12.82ID:5ZR90K1l
昨年末にHP(が作成したスクリプト)が京大のスパコンデータを吹き飛ばした事故があったけど、あれも原因は「実行中のシェルスクリプト書き換え」だったはず
2022/12/15(木) 23:19:14.14ID:a9LNvh7S
普通にバックアップ処理実行中に
プログラムアップデートするなって話だな
2022/12/16(金) 09:17:10.65ID:OmUfbGxN
>>947
opengroupはシェルスクリプトのコンパイルとか静的解析とか、なにやら不穏な事を考えているよう
One justification for ignoring the contents of IFS upon entry to the script, beyond security considerations, is to assist possible future shell compilers. Allowing IFS to be imported from the environment prevents many optimizations that might otherwise be performed via dataflow analysis of the script itself.
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html

寡聞だが珍妙な事やってるシェルなんて知らないし、シェルスクリプトなんてロートルなのがむしろ魅力なのにな

ちなみに俺はexitの後に>>"$0"でデバッグ中のログ取りしてる、別にログファイル作るのめんどいしバッファ再読み込みでエディタにすぐフィードバックが得られる

他のビルトインの項を見ても珍妙な展望(?)が見られて面白い、誰が望むんだこれ
It is anticipated that a future implementation could take advantage of this and provide something like:

outofloop: for i in a b c d e
do
for j in 0 1 2 3 4 5 6 7 8 9
do
if test -r "${i}${j}"
then break outofloop
fi
done
done

and that this might be standardized after implementation experience is achieved.

実装に先走って舵取りまでやりたいのかこいつら、傲慢もいいとこ
2022/12/16(金) 09:26:55.18ID:OmUfbGxN
exitやexecの先まで読まれるとtclやperlのように頭だけシェルスクリプトとして読まれて、読まれない部分にコードを記述するインタプリタや、到達しない部分をデータ置き場として使ってるスクリプトが困るような

まあ展望されている実装が十分賢くて、そこでシンタックスエラー出さないなら問題無いんだけど
2022/12/16(金) 09:41:47.00ID:OmUfbGxN
source another-file
${exitcmd}
こんなもん解析できるわけねー
2022/12/16(金) 10:43:52.39ID:IL6/baQf
>>950
何言ってるの? opengroupはシェル開発者がやろうと思っていることを
妨げないようにしているだけ

シェルスクリプトのコンパイルであればBourne Shellの開発者がやろうとしたことだし
Korn Shellにはずっと前からシェルスクリプトのコンパイラがある

お前の意見を押し付けるな
傲慢はお前だろ
2022/12/16(金) 10:48:02.96ID:IL6/baQf
>>950
誰が望むんだって、それただのラベルを使ったループの脱出じゃん
そういった拡張シェルを作りたい人もいるだろうし
お前は、将来の目をつもうとしてるのか?
シェルが改良されたら困ることでもあるのか?

まああるんだろうな。
新しいシェルを勉強したくない
2022/12/16(金) 10:53:44.58ID:IL6/baQf
> ちなみに俺はexitの後に>>"$0"でデバッグ中のログ取りしてる、別にログファイル作るのめんどいしバッファ再読み込みでエディタにすぐフィードバックが得られる

珍妙な事やってるな(笑)
2022/12/16(金) 10:56:32.82ID:Z4pvnD7F
面倒がまた増えるのか
2022/12/16(金) 11:00:38.08ID:IL6/baQf
>>951
単純にシェルスクリプトにシェルスクリプトとして解析できないものを埋め込んだら
コンパイルできないってだけだろ

頭固いよ(笑)
なんでシェルスクリプトのコンパイラは
どんなシェルスクリプトにも対応できなきゃ駄目だって
思っちゃうの?

【注意】以下のようなコードを書いたらコンパイルできません

って注意書きを書くだけでいいんだよ?
もっと柔軟な頭を作ろうね(笑)
2022/12/16(金) 11:01:23.90ID:Z4pvnD7F
インタプリタを軽くした方が筋がいいと思うわ
dashもなだかんだでコマンドライン編集や規格に従いたくて対話機能落とせてないし
どうせスクリプティングにしか使われないんだから、規格なんて無視すればいいのにと思う
2022/12/16(金) 11:06:09.35ID:IL6/baQf
機能を削減したら互換性がなくなるだろ
規格準拠じゃなくて、互換性のためにやってる
2022/12/16(金) 12:14:08.72ID:uGaF/TrQ
>>950
vi編集モードの指定がやけに細かいな
dashはemacsもヒストリもサポートしてるしむしろ対話シェルとして十分使える方で、普段対話使いしてる人もまあ居るかも

シェルスクリプトエンジンとしては、ttyに見せかけてvi/emacs風キーバインドを送って間接的にコマンドバッファ弄ったり、ヒストリ検索活用するシェルスクリプトが多いなら互換性の為に要るけど、要るかね?

対話用途の人も少なからず居るだろうからdashとしては出せなくても、名前を変えてシェルスクリプトエンジンとしてもっと特化した版があれば嬉しい
2022/12/16(金) 16:12:38.11ID:nGRI2Vf+
シェルスクリプトなんてコンパイルしたところで外部呼び出しだらけだし大して速くもならんでしょ

恩恵あるのはビルトインだけでループぐるぐる回すベンチくらい
2022/12/16(金) 16:15:48.57ID:IL6/baQf
>>960
> vi編集モードの指定がやけに細かいな
もしかしてPOSIXが仕様を決めたから
dashはその通りに作ってるとか思ってる?

vi編集モードとかemacsとか、それを最初にやったのはkshなの
dashやbashや他のシェルはそれを真似しただけ
POSIXはkshやdashやbashで移植性があるものを文書化しただけなの

> 対話用途の人も少なからず居るだろうからdashとしては出せなくても、
> 名前を変えてシェルスクリプトエンジンとしてもっと特化した版があれば嬉しい

自分で作ればいいじゃん?POSIXに準拠してないシェルを作ってもいいんだよ。
dashはPOSIXに準拠するという方針なだけ

機能を減らすことで何が嬉しいのか知らんけど/bin/shとしては使えなくなるだろうね。
別にbashをインストールしなきゃ対話的に使えないOSになってしまう
2022/12/16(金) 16:18:55.94ID:IL6/baQf
>>961
×シェルスクリプトなんてコンパイルしたところで外部呼び出しだらけだし大して速くもならんでしょ
○外部呼び出しだらけのシェルスクリプトはコンパイルしたところで速くならない

他の言語のようにビルトインだけで作ればいいんだよ
作れるわけがない?

作れない理由を潰せば作れるよね?
シェルの将来としてそのようなシェルがあってもいい
2022/12/16(金) 16:53:39.13ID:OmUfbGxN
>>961
それを言ってはおしまいだけど、IFS決め打ちって文脈からパースについて楽できないかって話ね

しかし複合文は先読みでエラー出せることから分かるように、環境の更新や副作用起こす展開をしないループなら既に手抜きは可

長大なベタ書きならIFS決め打ちで結構削れるだろうが、そんなケチくさい努力に見合うとは思わない
2022/12/16(金) 17:10:31.82ID:IL6/baQf
>>964
何の話してるの?
楽できる機能を搭載したシェル作ればいいだけじゃん?
2022/12/16(金) 17:23:00.10ID:0LHDM9/j
まああれだね
「POSIXが変なことを考えていて、コンパイラとかを作ろうとしてる」
と勘違いしているアホが居る

POSIXがどういうものかを理解していれば
「POSIXはコンパイラを作ろうとしているシェルがあることを知っていて
そういったシェルを将来作れるように考慮している」
が正しいとわかる
2022/12/16(金) 23:21:48.19ID:KwA6ycaA
じゃあ後追いでええのにな。
様子や実装具合を見ながら。

どうせ普及せんのやろし。w
2022/12/16(金) 23:35:49.94ID:Out/cb9o
>>967
だから後追いじゃん?
POSIXが先に作ってる仕様なんてないぞ
どこにPOSIXがコンパイラの仕様を作ってる?
よーくみたまえよ
2022/12/17(土) 13:59:03.04ID:yWXMz5Ex
一部だけ認めるのでもまだ早い。
大半が実装してから共通項を整理するくらいでいい。
2022/12/17(土) 14:13:00.20ID:zTx/vduP
>>969
やっぱり理解が追いついてないか(苦笑)

1. シェルスクリプト用のコンパイラを作りました
2. この時点でPOSIX準拠になっていないといけない
3. 大半が実装してから共通項を整理する

大半が実装するまでの間、POSIX違反になっちゃいけないのよ
意味わかる?POSIX違反なコンパイラを作るな!って言われるでしょ

POSIXが正しいシェル間違ったシェルを決めるのは傲慢
POSIXは決まった以外ならどんなシェルでも許さなきゃいけない
2022/12/17(土) 14:13:48.77ID:zTx/vduP
訂正
POSIXは決まったこと以外であれば、どんなシェルでも許さなきゃいけない
2022/12/17(土) 14:23:48.31ID:zTx/vduP
「大半が実装するまでPOSIXでは認めない」
これが傲慢な考えだってわからないのは本当にヤバイよ
POSIXがルールになってるじゃん

「大半が実装しなくてもPOSIXはそれを禁止することはない」
2022/12/17(土) 15:41:00.83ID:fCc6f5AR
>>950
例にしてもラベルの位置が先頭なのは思慮が足りなさすぎるな、予約語認識のセマンティクスとBNFに手を入れることになる
仮にねじ込むとすれば、inの部分で認識される
新予約語に続けてラベル名
2022/12/17(土) 15:55:58.46ID:3o3z3wxM
for x of outerloop [in word+]
的な感じか
ofは適当だけど、既に予約されてて意味の通るトークンが流用できれば望ましい
2022/12/17(土) 16:24:44.82ID:dohNO5X8
>>973
それ例じゃないからw
あんたこれPOSIXの提案だって思ってるでしょ?

こんな事も考えられるってことでだけだよ
そんなことに突っ込んでも意味ない
2022/12/17(土) 16:25:41.46ID:dohNO5X8
どういう文法にするかはシェルを作っている人たちが考えることであって
「POSIXは仕様を考えません」ってスタンスは明確になっている
2022/12/17(土) 16:25:59.84ID:nev2pk2m
まだ試してないけどfor x ofの時点でシンタックスエラー吐くのが普通だろうし、自由に選べるはず
C-style((..))のような拡張とも被らない
2022/12/17(土) 16:38:44.90ID:kO3DzgkN
次スレ
シェルスクリプト総合 その38
https://mevius.5ch.net/test/read.cgi/tech/1671262640/
2022/12/17(土) 16:39:51.81ID:fCc6f5AR
>>978
おつおつ
2022/12/17(土) 17:24:25.53ID:f0H2QhnO
>>978
おつ
2022/12/18(日) 11:36:21.55ID:X5nUMPIw
>>973
forに足すなら浮いてる終端記号
in : In
を拡張するのが確かにスマートなんだけど
言語全体で見るとwhile/untilに使えないのが不自然

for_clause : For name do_group
| For name sequential_sep do_group
| For name linebreak in sequential_sep do_group
| For name linebreak in wordlist sequential_sep do_group
;
while_clause : While compound_list do_group
;
until_clause : Until compound_list do_group
;
do_group : Do compound_list Done
;

do_groupに足したいところだが、compound_listが何でもアリだから曖昧になる、末尾:は非コマンド名と予約しても現状通るし、do : ; done すらイディオム、もちろん今のうちから予約しておくのは良い事
ただし意味論的にキモい事になる(label:がwhile行とズレる)
while ...
do label:
...
done
ので、ラベルのようなあっても無くても困らないものでなく、もっと重要な拡張の為に取っておくべき
2022/12/18(日) 13:49:22.73ID:2VP7BjPM
> もちろん今のうちから予約しておくのは良い事
勝手に予約しないでください
2022/12/18(日) 15:19:58.34ID:dtHdvs65
コマンドがファイルでありえる限りヌル文字と/以外なんでもありだし、本当に任意コマンドを受け取って呼ぶならcommand, type, envとかで全部問い合わせるか、クォートする必要があるな

ところで任意文字列のコマンドが既にダメなのは今更な事に気付いた、例えば
✗com=mand arg1 arg2…
✔\com=mand arg1 arg2...

これを流用して意味を為さない
=label
なんてどうかと思ったが、bash/dashはcommand not found返しやがる
2022/12/18(日) 15:31:36.28ID:dtHdvs65
不用心にパス区切へ使われがちな:はなるべく避けてるけど、名前空間の表現なんかでpkg:nameくらいは使いたい
末尾:という制限付きならまあ

とりあえずbashは関数も実行ファイルも普通に作れるしガン無視の模用、実効性は疑問
2022/12/18(日) 15:46:15.04ID:ZsJ4rXOo
個々人が(覚えてたら)一応リスペクトしておくか、の積み重ねじゃね
2022/12/18(日) 16:06:25.57ID:ZsJ4rXOo
>>983
=は他のコンテキストでクオートする必要がないところが特異

任意文字がダメなのはコントロールオペレータやメタ文字、予約語もそう
当たり前だから忘れがちだけど、空白>|($&cを含んだコマンドを呼ぶならクオートする
2022/12/18(日) 16:48:20.92ID:X5nUMPIw
>>983
面白い挙動見つけたな
名前を受け取ってevalし、空でなければ普通に環境設定、空ならデフォルト動作として=cmdが呼ばれるとか
色々遊べそう

禍根はこうして産まれるんだなって
2022/12/18(日) 17:18:29.27ID:X5nUMPIw
一応opengroupのShell Command Languageには
The words that are recognized as variable assignments or redirections according to Shell Grammar Rules are saved for processing in steps 3 and 4.
と記載があるので、variable assignmentとして認識できないなら、コマンドとして検索すると間接的に示唆してるな

もちろん期待すべきではないが
2022/12/18(日) 17:34:17.53ID:hzU9uYVT
名前が空になるのは大抵eval "$var=$val"のようなコードでのバリデーション不足だから、エラーにしてくれれば親切なのに
残念
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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