シェルスクリプトへの引数が空白をふくんでいるとき,おもいつくかぎりのシェル bash, zsh, csh, tcsh, ksh などをためしてみると,どれでも $* は空白で分割されたリストになっていた. つまり,引数として a\ a b\ b をあたえると,$1 = "a\ a" $2 = "b\ b" になるが $* = ["a", "a", "b", "b"] となる.だから,for や foreach では引数ごとのくりかえしができない. これは致命的なバグではないか.
引数ごとにくりかえすのに,つぎのようなコマンドがつかえると通常はかんがえられている.
for arg in $@; do ... done
foreach arg ($*) ... endしかし,空白をふくむ文字列はこの方法ではあつかえない.空白をさければよいのだが,さけられないこともある. こういうときは,for や foreach でなく if をつかって有限個の引数をあつかうことしかできない. if ならば引数ごとの処理ができる.
if [[ "$1" ]]; then ... fi if [[ "$2" ]]; then ... fi ...
キーワード:
コメント (1)
書き込みが素晴らしいです。あなたのコードを見て、多くの知識を得ました。シェアしてくれてありがとうございます。
投稿者: shikasale | 2023年09月06日 12:14
日時: 2023-09-06 12:14