bash:条件命令中出现意外标记283

bash:条件命令中出现意外标记283,bash,Bash,我在bash shell中输入命令: #!/bin/bash [[ a>2 ]];echo $? 我得到0 还有一个命令: #!/bin/bash [[ 3>2 ]];echo $? 我明白了 bash: unexpected token 283 in conditional command bash: syntax error near `3>' 为什么我会犯错误 如何在代码[[]]/code中使用2]];echo$?不添加空格,但[[3>2]]必须添加空格,更想知道原

我在bash shell中输入命令:

#!/bin/bash
[[ a>2 ]];echo $?
我得到
0

还有一个命令:

#!/bin/bash
[[ 3>2 ]];echo $?
我明白了

bash: unexpected token 283 in conditional command
bash: syntax error near `3>'
为什么我会犯错误

如何在代码[[]]/code中使用
2]];echo$?
不添加空格,但
[[3>2]]
必须添加空格,更想知道原因

谢谢大家!

正如bash内置的手册页所述:“每个操作符和操作数 必须是一个单独的论点。”

另外,变量
a
应该是
$a

下面是一个例子:

# Returns true
$ a=10;  [[ "$a" -gt 1 ]]; echo "$?"
0

# Returns false  
$ a=10;  [[ "$a" -gt 12 ]]; echo "$?"
1
下面的内容可能会对您有所帮助

整数比较运算符

| Operator | Description                 | Example                                                  |
|----------|-----------------------------|----------------------------------------------------------|
| -eq      | Is Equal To                 | if [ $1 -eq 200 ]                                        |
| -ne      | Is Not Equal To             | if [ $1 -ne 1 ]                                          |
| -gt      | Is Greater Than             | if [ $1 -gt 15 ]                                         |
| -ge      | Is Greater Than Or Equal To | if [ $1 -ge 10 ]                                         |
| -lt      | Is Less Than                | if [ $1 -lt 5 ]                                          |
| -le      | Is Less Than Or Equal To    | if [ $1 -le 0 ]                                          |
| ==       | Is Equal To                 | if (( $1 == $2 )) [Note: Used within double parentheses] |
| !=       | Is Not Equal To             | if (( $1 != $2 ))                                        |
| <        | Is Less Than                | if (( $1 < $2 ))                                         |
| <=       | Is Less Than Or Equal To    | if (( $1 <= $2 ))                                        |
| >        | Is Greater Than             | if (( $1 > $2 ))                                         |
| >=       | Is Greater Than Or Equal To | if (( $1 >= $2 ))                                        |
| Operator | Description                        | Example         | 
|----------|------------------------------------|-----------------| 
| = or ==  | Is Equal To                        | if [ $1 == $2 ] | 
| !=       | Is Not Equal To                    | if [ $1 != $2 ] | 
| >        | Is Greater Than (ASCII comparison) | if [ $1 > $2 ]  | 
| >=       | Is Greater Than Or Equal To        | if [ $1 >= $2 ] | 
| <        | Is Less Than                       | if [ $1 < $2 ]  | 
| <=       | Is Less Than Or Equal To           | if [ $1 <= $2 ] | 
| -n       | Is Not Null                        | if [ -n $1 ]    | 
| -z       | Is Null (Zero Length String)       | if [ -z $1 ]    | 
|运算符|说明|示例|
|----------|-----------------------------|----------------------------------------------------------|
|-等式|等于|如果[$1-等式200]|
|-ne |不等于|如果[$1-ne 1]|
|-gt|大于|如果[$1-gt 15]|
|-如果[1美元-ge 10],则ge |大于或等于||
|-lt |小于|如果[$1-lt 5]|
|-le |小于或等于|如果[$1-le 0]|
|==|等于| if($1==$2))[注:用在双括号内]|
| !=       | 不等于| if(($1!=$2))|
|<|小于|如果($1<$2))|
|  $2 ))                                         |
|>=|大于或等于|如果($1>=$2))|
字符串比较运算符

| Operator | Description                 | Example                                                  |
|----------|-----------------------------|----------------------------------------------------------|
| -eq      | Is Equal To                 | if [ $1 -eq 200 ]                                        |
| -ne      | Is Not Equal To             | if [ $1 -ne 1 ]                                          |
| -gt      | Is Greater Than             | if [ $1 -gt 15 ]                                         |
| -ge      | Is Greater Than Or Equal To | if [ $1 -ge 10 ]                                         |
| -lt      | Is Less Than                | if [ $1 -lt 5 ]                                          |
| -le      | Is Less Than Or Equal To    | if [ $1 -le 0 ]                                          |
| ==       | Is Equal To                 | if (( $1 == $2 )) [Note: Used within double parentheses] |
| !=       | Is Not Equal To             | if (( $1 != $2 ))                                        |
| <        | Is Less Than                | if (( $1 < $2 ))                                         |
| <=       | Is Less Than Or Equal To    | if (( $1 <= $2 ))                                        |
| >        | Is Greater Than             | if (( $1 > $2 ))                                         |
| >=       | Is Greater Than Or Equal To | if (( $1 >= $2 ))                                        |
| Operator | Description                        | Example         | 
|----------|------------------------------------|-----------------| 
| = or ==  | Is Equal To                        | if [ $1 == $2 ] | 
| !=       | Is Not Equal To                    | if [ $1 != $2 ] | 
| >        | Is Greater Than (ASCII comparison) | if [ $1 > $2 ]  | 
| >=       | Is Greater Than Or Equal To        | if [ $1 >= $2 ] | 
| <        | Is Less Than                       | if [ $1 < $2 ]  | 
| <=       | Is Less Than Or Equal To           | if [ $1 <= $2 ] | 
| -n       | Is Not Null                        | if [ -n $1 ]    | 
| -z       | Is Null (Zero Length String)       | if [ -z $1 ]    | 
|运算符|说明|示例|
|----------|------------------------------------|-----------------| 
|=或==|等于|如果[$1==$2]|
| !=       | 不等于| if[$1!=$2]|
|>|大于(ASCII比较)|如果[$1>$2]|
|>=|大于或等于|如果[$1>=$2]|
|<|小于|如果[$1<$2]|

|您必须添加空白。e、 g.
[[3>2]]
,或者改用
((3>2))
。你期望会发生什么?我更好奇的是
[[]]
如何使用
。代码[[a>2]];echo$?
不添加空格,但
[[3>2]]
必须添加空格,更好奇的是原因我认为确实值得解释为什么
[[a>3]]
不会产生错误,实际发生的情况以及为什么
[[1>3]
会产生此特定错误。或者为什么
[[“1>3”]
不会产生错误。或者为什么
[[1>3]]
仍然不是比较数字的正确方法等=>我不理解反对票。我不理解的是错误信息;“283”来自哪里?我在BashV2.05b.0的旧系统上尝试了它,得到了“条件命令中意外的令牌280”;在BashV3.2.57中,我得到了错误“283”,在v4.2.10和v4.4.12中,我得到了“284”。我怀疑这需要深入研究
bash
源代码。