首页 > 解决方案 > “-eq”运算符对于双括号之间的字符串比较始终为真

问题描述

例如:

A="T"
if [[ $A -eq "M" ]]; then
    echo "$A"
fi

这将始终回显T

标签: bash

解决方案


-eq用于整数比较。[[在and之间,如果(and ,等)]]周围的操作数不是整数而是有效的变量名,bash 假定这些是变量并尝试(递归地)取消引用它们。在同样的上下文中,未设置/空变量的值被认为是零;所以,你基本上是在比较 0 和 0。看这个成绩单:-eq-ne-lt

$ unset A M T
$ A="T"
$ if [[ $A -eq "M" ]]; then
>     echo "$A"
> fi
T
$
$ T="1"
$ A="T"
$ if [[ $A -eq "M" ]]; then
>     echo "$A"
> fi
$

T被分配一个非零的数字时,它不再响起

如需更多信息,请参阅:


推荐阅读