末尾のコロンとダッシュの組み込みテストコマンド

末尾のコロンとダッシュの組み込みテストコマンド

testダッシュ組み込み(または)コマンドの末尾のコロンの意味は何ですか[if [ ... ]: ; then .. ; fiでは(完全に)動作しますが、では動作しないことを知ってdash驚きました。bashこれは、組み込み関数がコマンドとは異なる動作をするためです。

$ /usr/bin/\[ 1 ] && echo 1
1
$ /usr/bin/\[ 1 ]: && echo 1
/usr/bin/[: missing `]'
$ [ 1 ]: && echo 1
1

答え1

コマンドを解析すると、これは大きな問題のようです。 bash閉じ括弧が最後の引数になると予想し、正確に「]」文字列ではない場合は文句を言います。

bash$ [ 1 ]
bash$ [ 1 ] hi
bash: [: missing `]'
bash$ [ 1 ]hi
bash: [: missing `]'
bash$ dash
$ [ 1 ]
$ [ 1 ] hi
dash: 2: [: missing ]
$ [ 1 hi]
dash: 3: [: missing ]
$ [ 1 ]:
$ [ 1 ]hi
$

シェルはdash最初の文字が「]」であることを確認し、残りは無視します。 "]"が最後の引数の最初の文字にない場合は、次bashのようなエラーが返されます。

関連情報