为什么在Bash中'['和']'周围会有空格?

问题描述 投票:61回答:4

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

if[$CHOICE -eq 1];

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

if [ $CHOICE -eq 1 ];

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

bash if-statement syntax
4个回答
72
投票

一旦您意识到[command,整个事情就会变得更加清晰!

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

help [

然而,尽管它们[完全相同,但test却具有更详细的帮助页面。检查

help test
...了解更多信息。


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

14
投票
来自another question

一段历史:这是因为'['在历史上不是Shell内置的,而是一个单独的可执行文件,该文件接收expresson作为参数并返回结果。如果您不使用空格将'['引起来,shell将在$ PATH中搜索其他文件名(但找不到它)。 –Andrew Medico2009年6月24日,1:13

8
投票
[是命令,$CHOICE应该是自变量,但是通过执行[$CHOICE(在[$CHOICE之间没有任何空格),您试图运行名为[$CHOICE的命令。命令的语法为:

command arguments separated with space


3
投票
[test命令。因此,它需要空间。
© www.soinside.com 2019 - 2024. All rights reserved.