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


当前回答

如果输入只有几个有效项,我可能会使用regexp匹配。例如,只有“开始”和“停止”是有效的操作。

if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
  echo "valid action"
fi

注意,我使用双逗号小写变量$ACTION。还要注意,这在太老的bash版本上不起作用。

其他回答

你也可以使用用例/esac:

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

我这样做,是兼容Bash和Dash (sh):

testOutput="my test"
pattern="my"

case $testOutput in (*"$pattern"*)
    echo "if there is a match"
    exit 1
    ;;
(*)
   ! echo there is no coincidence!
;;esac

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

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

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

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

Bash 4+示例。注意:当单词中包含空格时,不使用引号会导致问题。在我看来,总是用Bash引用。

下面是Bash 4+中的一些例子:

例1,在字符串中检查'yes'(不区分大小写):

    if [[ "${str,,}" == *"yes"* ]] ;then

例2,检查字符串中的'yes'(不区分大小写):

    if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then

例3,检查字符串中的'yes'(区分大小写):

     if [[ "${str}" == *"yes"* ]] ;then

例4,检查字符串中的'yes'(区分大小写):

     if [[ "${str}" =~ "yes" ]] ;then

例5,精确匹配(区分大小写):

     if [[ "${str}" == "yes" ]] ;then

例6,精确匹配(不区分大小写):

     if [[ "${str,,}" == "yes" ]] ;then

例7,精确匹配:

     if [ "$a" = "$b" ] ;then

享受。

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

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