为什么在Bash中'['之前'''之后会有一个空格?

时间:2012-03-06 09:36:23

标签: bash if-statement syntax

我正在尝试编写一个使用if语句的Bash脚本。

if  [$CHOICE -eq 1];

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

if  [ $CHOICE -eq 1 ];

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

4 个答案:

答案 0 :(得分:65)

一旦你认识到 [ 命令 ,一大堆就会变得更加清晰!

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

help [

然而,当他们完全相同时,test会有更详细的帮助页面。检查

help test

...了解更多信息。


此外请注意,我故意使用help test而不是man test。那是因为test[现在是shell内置命令。它们的功能集可能与/bin/test/bin/[不同,而coreutils是man页面中描述的命令。

答案 1 :(得分:14)

来自another question

  

一点历史:这是因为'['在历史上不是shell内置的,而是一个单独的可执行文件,它接收expresson作为参数并返回结果。如果你没有用空格包围'[',那么shell会在$ PATH中搜索不同的文件名(而不是找到它)。 - Andrew Medico 2009年6月24日1:13

答案 2 :(得分:7)

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

command arguments separated with space

答案 3 :(得分:2)

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