Shell
尾隨冒號和破折號的內置測試命令
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 $
dash
shell 只會確保第一個字元是“]”並忽略其餘字元。如果“]”不在最後一個參數的第一個字元中,則返回與bash
.