内置 [,-bash:[:缺少`]'

内置 [,-bash:[:缺少`]'

在艰难地学习 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当您有函数或别名掩码时,该命令更有用[

相关内容