我正在 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