Shell

尾隨冒號和破折號的內置測試命令

  • March 26, 2015

test破折號的內置(或[)命令的尾隨冒號是什麼意思?當我發現它if [ ... ]: ; then .. ; fi(完全)在 中有效dash,但在 中無效時,我感到很驚訝bash,這似乎是因為內置函式的行為與命令的不同。

$ /usr/bin/\[ 1 ] && echo 1
1
$ /usr/bin/\[ 1 ]: && echo 1
/usr/bin/[: missing `]'
$ [ 1 ]: && echo 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
$

dashshell 只會確保第一個字元是“]”並忽略其餘字元。如果“]”不在最後一個參數的第一個字元中,則返回與bash.

引用自:https://unix.stackexchange.com/questions/192731