Bash 未找到命令从if[-gt]比较触发的错误

Bash 未找到命令从if[-gt]比较触发的错误,bash,Bash,我正在浏览这里的示例,希望得到一些帮助来解释为什么这个脚本抛出错误[37:command not found] #!/bin/bash # ex74.sh # This is a buggy script. # Where, oh where is the error? a=37 if [$a -gt 27 ] then echo $a fi exit $? # 0! Why? 之所以在[之后加空格,是因为[也不是语法。它是一个简单的命令。通常是shell的内置命令。she

我正在浏览这里的示例,希望得到一些帮助来解释为什么这个脚本抛出错误[37:command not found]

#!/bin/bash
# ex74.sh

# This is a buggy script.
# Where, oh where is the error?

a=37

if [$a -gt 27 ]
then
  echo $a
fi  

exit $?   # 0! Why?
之所以在
[
之后加空格,是因为
[
也不是语法。它是一个简单的命令。通常是shell的内置命令。shell执行命令
[
,其余部分作为参数,包括]作为强制的最后一个参数。如果不在
之后加空格[
shell将尝试以命令的形式执行
[任何
,但失败


在]前面加空格的原因类似。否则它将不会被识别为自己的参数。

[$a
->
[$a
。在
[
之后和
]
之前需要空格谢谢,为什么我需要空格,bash解释器认为[$a是什么?在过去
[
是一个与
test
具有相同功能的命令。它目前是一个内置命令,但
[
/usr/bin/[
中残留。因此
test$a-gt 27]
是好的,但
test$a-gt 27]
是坏的。与
[$a
相同
if [ $a -gt 27 ]
    ^
    |
    add space here