shell中[[]]与[],=、==和-eq的辨析

1、==、=和-eq

在shell中,===运算符都可以用于判断两个字符串、两个字符串变量是否相同,== 支持模式匹配,而= 不支持模式匹配。
使用 -eq 来判断两个整数是否相等。

# 字符串比较
# 给变量赋值时,等号前后没有空格,有空格时是条件判断
string1=abc
string2=bcd
# [ "$string1" = "$string2" ]内的空格是必须的!!
if [ "$string1" = "$string2" ]; then
    echo "The strings are equal"
fi

#整数比较
num1=123
num3=123
# 注意中括号内的空格!!
if [ "$num1" -eq "$num2" ]; then
    echo "The numbers are equal"
fi

2、[[ ]] 和 [ ]

在 shell 脚本中,[[[ 都可以用于条件测试。
  [ 是一个标准的 Unix 命令,也被称为 test。它在所有 POSIX shell 中都可用,包括 sh、bash、ksh、dash 等。
  [[ 是 bash 和其他一些现代 shell(如 zsh 和 ksh)中的关键字,提供了比 [ 更强大的功能。例如,它支持字符串模式匹配和正则表达式匹配
[[[ 中,进行条件判断时,是使用=还是==呢?
  对于[,一般使用=进行条件判断,==不是一个标准的运算符,但是在某些shell(比如bash)中,在[使用==是可以的。对于[[===都可以在[[用于字符串比较, -eq用于整数比较。
  他们之间的对应关系: =用在[ 中; ==用在[[中。这样用是不会出错的。

[的用例:

if [ "$variable" = "value" ]; then
    echo "The variable equals the value"
fi

[[的用例:

# 支持通配符匹配
if [[ "$variable" == value* ]]; then
    echo "The variable starts with 'value'"
fi
# 支持正则表达式匹配
if [[ "$variable" =~ ^value ]]; then
    echo "The variable starts with 'value'"
fi

总结起来就是,[]支持的shell类型更多,兼容性更好,而[[]]的功能更强大。

你可能感兴趣的:(shell学习,shell,linux,bash,服务器)