Bash:双等于与 -eq

Bash:双等于与 -eq

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

双等于:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

我知道 bash 中没有 >= 或 <=,只有 -ge 和 -le,那么==如果有 a为什么会有 a 呢-eq

双方比较的方式有区别吗?

答案1

==bash的特定别名=,它执行字符串(词法)比较而不是-eq数字比较。 (它是 Perl 的倒退:单词样式运算符是数字,符号运算符是词汇。)

答案2

详细说明博洛万的回答...

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

如果您在内部使用其他==字符串比较运算符(但不是),则还可以使用它们来比较整数。!=<>=((...))

例子

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

注意:并非所有 shell 都支持双括号语法[[...]]和双括号语法。((...))

答案3

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

例子:

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

相关内容