Answers:
==是的bash特定别名=,它执行字符串(词法)比较而不是-eq数字比较。(这是从Perl倒过来的:单词样式运算符是数字,符号运算符是词法。)
-eq告诉bash将字符串解释为整数(0如果字符串不是数字,则在没有警告的情况下生成)。
[ 01 -eq 1 ]但是[ 01 != 1 ]。
==作为[运算符是非标准的,不应使用,但它不是bash特定的。它由ksh引入,并由zsh(尽管首先=需要引用),yash和GNU [实用程序(以及在某些系统上至少以ksh脚本实现的任何此类实用程序)支持。
$ if [ "hello" -eq 0 ]; then echo true; fi bash:[:你好:预期为整数表达式
详细阐述bollovan的答案 ...
字符串没有>=或<=比较运算符。但是您可以将它们与((...))算术命令一起使用以比较整数。
您还可以使用其他字符串比较操作符(==,!=,<,>,但没有=),如果你里面用它们来比较整数((...))。
例子
[[ 01 -eq 1 ]]和(( 01 == 1 ))都进行整数比较。两者都是对的。[[ 01 == 1 ]]和[ 01 = 1 ]都进行字符串比较。两者都是错误的。(( 01 -eq 1 ))并(( 01 = 1 ))会返回一个错误。注意:并非所有外壳程序都支持[[...]]双括号语法和双括号语法((...))。
mksh/ zsh除外(在POSIX模式下除外(尽管不是POSIX功能)))(( 010 == 10 ))将返回false,因为010它将被视为八进制数字(十进制为8)。
test/ [实现没有>=/ <=运营商(yash的[具有虽然),expr有这样的运营商,但如果参数被识别为数字会做算术比较(expr 01 '>=' 1返回true,expr X01 '>=' X1返回false)。
如果要进行整数比较,最好使用(()),也可以使用> =等。
例:
if (( $UID == 0 )); then
echo "You are root"
else
echo "You are not root"
fi
(( UID == 0 ))或(( ! UID ))对此很重要。请注意,这((...))是非标准的(此ksh功能也受变体支持bash并zsh带有变体)。
[ $UID -eq 0 ],而不是[ $UID -eq 0]。