it-swarm.cn

重击:双等于vs -eq

我正在bash中进行整数比较(试图查看用户是否以root用户身份运行),我发现了两种不同的实现方式:

双倍等于:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

我知道bash中没有> =或<=,只有-ge和-le,所以为什么有==如果有-eq

双方比较的方式是否有所不同?

49
beatgammit

===的特定于bash的别名,它执行字符串(词法)比较而不是-eq数字比较。 (这是从Perl倒过来的:Word样式的运算符是数字的,符号运算符是词法的。)

55
geekosaur

详细说明 bollovan的答案 ...

字符串没有>=<=比较运算符。但是您可以将它们与((...))算术命令一起使用以比较整数。

如果在内部使用整数比较符,也可以使用其他字符串比较运算符(==!=<>,但不能使用=)比较整数。 ((...))

示例

  • [[ 01 -eq 1 ]](( 01 == 1 ))都进行整数比较。两者都是对的。
  • [[ 01 == 1 ]][ 01 = 1 ]都进行字符串比较。两者都是错误的。
  • (( 01 -eq 1 ))(( 01 = 1 ))都将返回错误。

注意:并非所有外壳程序都支持双括号语法[[...]]和双括号语法((...))

13
toxalot

如果要进行整数比较,最好使用(()),也可以使用> =等。

例:

if (( $UID == 0 )); then
   echo "You are root"
else
   echo "You are not root"
fi
7
bollovan