我试图编写一个使用if
语句的Bash脚本。
if [$CHOICE -eq 1];
脚本给了我错误,直到我在[
之后和]
之前给出了一个空格,如下所示:
if [ $CHOICE -eq 1 ];
我的问题是,为什么方括号周围的空间在Bash中如此重要?
一旦你掌握了[
是一个命令,一大堆就会变得更加清晰!
[
是拼写“test
”的另一种方式。
help [
然而,虽然他们完全一样,但test
却有更详细的帮助页面。校验
help test
...欲获得更多信息。
此外请注意,我是故意使用help test
而不是man test
。那是因为test
和[
现在是shell内置命令。它们的特征集可能与来自coreutils的/bin/test
和/bin/[
不同,后者是man
页面中描述的命令。
一点历史:这是因为'['在历史上不是shell内置的,而是一个单独的可执行文件,它接收expresson作为参数并返回结果。如果你没有用空格包围'[',那么shell会在$ PATH中搜索不同的文件名(而不是找到它)。 - Andrew Medico 09年6月24日在1:13
[
是一个命令,$CHOICE
应该是一个参数,但通过做[$CHOICE
([
和$CHOICE
之间没有任何空格)你试图运行一个名为[$CHOICE
的命令。命令的语法是:
command arguments separated with space
[
是一个test
命令。所以它需要空间。