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


当前回答

下面的脚本逐行读取名为“testonthis”的文件,然后将每行与简单字符串、带有特殊字符的字符串和正则表达式进行比较。如果不匹配,脚本将打印该行,否则不打印该行。

在Bash中,空间非常重要。所以下面的方法是可行的:

[ "$LINE" != "table_name" ] 

但下面的情况不会:

["$LINE" != "table_name"] 

所以请用as is:

cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done

其他回答

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

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

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

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

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

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

下面的脚本逐行读取名为“testonthis”的文件,然后将每行与简单字符串、带有特殊字符的字符串和正则表达式进行比较。如果不匹配,脚本将打印该行,否则不打印该行。

在Bash中,空间非常重要。所以下面的方法是可行的:

[ "$LINE" != "table_name" ] 

但下面的情况不会:

["$LINE" != "table_name"] 

所以请用as is:

cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done

你也可以使用用例/esac:

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

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

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