尾随冒号和破折号的内置测试命令

尾随冒号和破折号的内置测试命令

testdash 的内置(或)命令的尾随冒号的含义是什么[?当我发现它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

相关内容