为什么';[';和';]';在Bash?
我试图编写一个Bash脚本,它使用为什么';[';和';]';在Bash?,bash,if-statement,syntax,Bash,If Statement,Syntax,我试图编写一个Bash脚本,它使用if语句 if[$CHOICE -eq 1]; 脚本一直在给我错误,直到我在[之前和之后以及]之前给了一个空格,如下所示: if [ $CHOICE -eq 1 ]; 我这里的问题是,为什么方括号周围的空间在Bash中如此重要?一旦你理解了[是一个命令,一切都变得更加清晰了 [是另一种拼写“test”的方法 然而,尽管它们的操作完全相同,test显示了一个更详细的帮助页面。请检查 help test …了解更多信息 此外,请注意,我有意使用的是帮助测试,
if
语句
if[$CHOICE -eq 1];
脚本一直在给我错误,直到我在[
之前和之后以及]
之前给了一个空格,如下所示:
if [ $CHOICE -eq 1 ];
我这里的问题是,为什么方括号周围的空间在Bash中如此重要?一旦你理解了
[
是一个命令,一切都变得更加清晰了
[
是另一种拼写“test
”的方法
然而,尽管它们的操作完全相同,test
显示了一个更详细的帮助页面。请检查
help test
…了解更多信息
此外,请注意,我有意使用的是
帮助测试
,而不是人工测试
。这是因为测试
和[
现在都是shell内置命令。它们的功能集可能与/bin/test
和/bin>不同/[
来自coreutils,这是man
页面中描述的命令。来自:
一点历史:这是因为“[”在历史上不是一个内置的shell,而是一个单独的可执行文件,它接收expresson作为参数并返回一个结果。如果不在“[”周围加空格,shell将在$PATH中搜索另一个文件名(但找不到)。–2009年6月24日1:13
[
是一个测试
命令。因此它需要空间。[
是一个命令,$CHOICE
应该是一个参数,但是通过执行[$CHOICE
(在[
和$CHOICE
之间没有任何空格)可以尝试运行名为[$CHOICE
的命令。该命令的语法为:
command arguments separated with space
最初,它位于
/usr/bin/[
,是指向/usr/bin/test
的硬链接,当作为[
调用时,您应该包括一个右括号作为最后一个参数。现在它是一个shell内置参数。请注意,它们并不完全“完全”相同。[
要求其最后一个参数是]
。一般语法是if command;then commands\u if\u exit\u code\u是\u 0;else commands\u if\u exit\u code\u是非零;fi;
command
可以是任何命令,[
只是其中之一。相关:(您也需要操作符周围的空格)。请参阅此相关帖子:.if$CHOICE
是“foo”
,您正在尝试运行命令[“foo”
。
command arguments separated with space