为什么在Bash中的'有一个空格?

我试图写一个使用if语句的Bash脚本。

 if [$CHOICE -eq 1]; 

脚本给了我错误,直到我在[之前]之后给出空格,如下所示:

 if [ $CHOICE -eq 1 ]; 

我的问题是,为什么方括号中的空格在Bash中如此重要?

一旦你掌握了这个命令 ,就会变得更加清晰!

[另一种拼写“ test ”的方法。

 help [ 

然而,尽pipe他们完全一样, test结果是有一个更详细的帮助页面。 检查

 help test 

…了解更多信息。


此外请注意,我正在使用,通过意图, help test而不是man test 。 那是因为test[现在是shell命令。 他们的function集可能不同于/bin/test/bin/[来自coreutils,它们是man页中描述的命令。

从另一个问题 :

有点历史:这是因为'['历史上不是一个内置的shell,而是一个单独的可执行文件,它以expression式作为参数并返回结果。 如果你没有用空格来包围'['',那么shell会在$ PATH中search一个不同的文件名(而没有find它)。 – – 安德鲁·梅迪科2009年 6月24日在1:13

[是一个命令, $CHOICE应该是一个参数,但是通过执行[$CHOICE[$CHOICE之间没有任何空格[ ),试图运行名为[$CHOICE 。 命令的语法是:

 command arguments separated with space 

[是一个test命令。 所以它需要空间。