如何判断shell中变量/字符串相等

1、[ $a -eq $b ] 注意此种方法只能判断整数类型

# a=1
# b=2
# [ $a -eq $b ]
# echo $?
#这里是测试上一个语句执行结果,为0则成功,其他则不成功
1  
# b=1
# [ $a -eq $b ]
# echo $?
0  
# a="abc"
# b="bcd"
# [ $a -eq $b ]
-bash: [: abc: 期待整数表达式

2、[ $a = $b ][ ]=== 有相同效果,但是在非比较语句中=是赋值

#这里测试接上面脚本
# [ $a = $b ]
# echo $?
1  
# b="abc"
# [ $a = $b ]
# echo $?
0  

3、[ $a == $b ] 判断字符串和数字类型,请注意,此时$a是把一个字符串类型当成多个参数传入

# [ $a == $b ]
# echo $?
0  
# a="abc bcd cde"
# b="abc bcd cde"
# [ $a == $b ]
-bash: [: 参数太多

4、[ '$a' == '$b' ] 判断字符串类型,同上面相比,此时$a是把一个字符串类型当成一个参数传入;此时“”里面的变量是提取值之后再比较

# [ "$a" == "$b" ]
# echo $?
0  
# b="abc cbd cde"
# [ "$a" == "$b" ]
# echo $?
1  

5、[ '$a' == '$b' ] 这是一个错误的的比较方法!因为在‘’里面任何特殊字符是无效的,此时我们比较的时候是把$a 和 $b 即变量名作为字符串传入进行比较而不是把$a $b 的内容提取出来再比较。

# b="abc bcd cde"
# [ '$a' == '$b' ]
# echo $?
1