我如何比较一个变量的字符串(并做一些事情,如果他们匹配)?
当前回答
我也曾在同样的情况下挣扎过一段时间,下面是我解决的方法:
if [ "$var1" == "$var2" ]; then
#dowhateveryouwant
fi
注意比较符号前后的空格,否则将不起作用,或者会得到意想不到的结果。
我花了很多时间在使用一个等号(=)上,但没有用。希望能有所帮助。
其他回答
要比较字符串和通配符,使用:
if [[ "$stringA" == *"$stringB"* ]]; then
# Do something here
else
# Do something here
fi
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和[和]之间的空格很重要 >和<是重定向操作符,因此对于字符串分别使用\>和\<转义。
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
享受。
你也可以使用用例/esac:
case "$string" in
"$pattern" ) echo "found";;
esac
下面的脚本逐行读取名为“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