test
dash 的内置(或)命令的尾随冒号的含义是什么[
?当我发现它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
$
shelldash
将只确保第一个字符是“]”并忽略其余字符。如果“]”不在最后一个参数的第一个字符中,则它返回与 类似的错误bash
。