首页 > Bash shell 中 "-eq" 与 "=" 等价吗?

Bash shell 中 "-eq" 与 "=" 等价吗?

有没有这样的限制:
-eq: 适用于或偏向于 "数字相等"
= : 选用于或偏向于 "字符串相等"

我之前写 shell script 时在这个地方出过错, 一直没有弄明白.


RTFM

$ man test
       STRING1 = STRING2
              the strings are equal

       STRING1 != STRING2
              the strings are not equal

       INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2

尽量使用 extended test 吧,即 [[ ]],里面可以使用比较习惯的 == 代替 =,并且不用担心 word spliting 和 filename expansion.


准确来说是适用对象不同:
-eq= 都可以用来条件测试进行判断两个操作对象是否相同,但是有如下区别:
-eq 适用于整数数字,不能进行字符串的条件测试
= 既适用于数字,又适用于字符串。
我做了下测试:

bash$ [ 1 -eq 1 ] && echo "ok"
ok
$ [ 1 = 1 ] && echo "ok"
ok
$ [ "a" -eq "a" ] && echo "ok"
sh: [: a: 需要整数表达式
$ [ "a" = "a" ] && echo "ok"
ok

楼主想进一步了解的话可以搜索下"shell 条件测试"

【热门文章】
【热门文章】