我如何比较一个变量的字符串(并做一些事情,如果他们匹配)?


当前回答

我也曾在同样的情况下挣扎过一段时间,下面是我解决的方法:

   if [ "$var1" == "$var2" ]; then
      #dowhateveryouwant
    fi
  

注意比较符号前后的空格,否则将不起作用,或者会得到意想不到的结果。

我花了很多时间在使用一个等号(=)上,但没有用。希望能有所帮助。

其他回答

要比较字符串和通配符,使用:

if [[ "$stringA" == *"$stringB"* ]]; then
  # Do something here
else
  # Do something here
fi

你也可以使用用例/esac:

case "$string" in
 "$pattern" ) echo "found";;
esac

或者,如果你不需要else子句:

[ "$x" == "valid" ] && echo "x has the value 'valid'"

你是否存在比较问题?(如下面?)

var="true"
if [[ $var == "true" ]]; then
  # It should be working, but it is not...
else
  # It is falling here...
fi

试试=~操作符(正则表达式操作符),它可能会工作:

var="true"
if [[ $var =~ "true" ]];then
  # Now it works here!!
else
  # No more inequality
fi

Bash正则表达式运算符=~(官方参考) StackOverflow的进一步示例(此处)

a="abc"
b="def"

# Equality Comparison
if [ "$a" == "$b" ]; then
    echo "Strings match"
else
    echo "Strings don't match"
fi

# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; then
    echo "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; then
    echo "$b is lexicographically smaller than $a"
else
    echo "Strings are equal"
fi

注:

if和[和]之间的空格很重要 >和<是重定向操作符,因此对于字符串分别使用\>和\<转义。