在艰难地学习 bash 的过程中,我发现[
和test
都是命令和同义词,并且都是内置的。
由于它是内置的,因此它不应该给出任何错误 builtin [
,但我得到了-bash: [: missing `]'
,有人可以在这里向我解释内置的行为吗?提前致谢。
anupam:Markdown$ which [
/usr/bin/[
anupam:Markdown$ echo $?
0
anupam:Markdown$ which test
/usr/bin/test
anupam:Markdown$ echo $?
0
anupam:Markdown$ builtin test
anupam:Markdown$ echo $?
1
anupam:Markdown$ builtin [
-bash: [: missing `]'
anupam:Markdown$ echo $?
2
anupam:Markdown$
答案1
[
该命令的版本需要作为]
最后一个参数(因此必须是前面有一个空格)。这只是一种形式上的语法手段,用来强制用户关闭括号内的“块”,因此命令如下所示:
if [ $1 -eq 2 ]; then
代替
if [ $1 -eq 2; then
看help [
:
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
笔记
该
test
版本不要求也不接受最终版本]
。您不需要
builtin
那里。内置命令优先于外部命令,因此只需[
执行内置命令即可。builtin
当您有函数或别名掩码时,该命令更有用[
。