[ トップページ ]
数学・計算・情報学・プログラミング:オペレーティングシステム, 情報通信博物館:コンピュータ館

Unix 系のシェルスクリプトはみな,空白のあつかいにおいて,こわれている !!

シェルスクリプトへの引数が空白をふくんでいるとき,おもいつくかぎりのシェル 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
...

キーワード:

トラックバック

このエントリーのトラックバックURL:
https://www.kanadas.com/mt/mt-tb.cgi/7767

コメント (1)

書き込みが素晴らしいです。あなたのコードを見て、多くの知識を得ました。シェアしてくれてありがとうございます。

コメントを投稿

Google でブログを検索:

メインページアーカイブページも見てください.
Creative Commons License
このブログはつぎのライセンスで保護されています. クリエイティブ・コモンズ・ライセンス.
Powered by Movable Type