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


当前回答

你也可以使用用例/esac:

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

其他回答

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

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

在if语句中使用变量

if [ "$x" = "valid" ]; then
  echo "x has the value 'valid'"
fi

如果你想在它们不匹配的时候做一些事情,用!=替换=。您可以在它们各自的文档中阅读更多关于字符串操作和算术操作的信息。

为什么在$x周围使用引号?

你需要在$x周围加上引号,因为如果$x为空,你的Bash脚本会遇到如下所示的语法错误:

if [ = "valid" ]; then

==运算符的非标准使用

请注意,Bash允许使用==与[相等,但这不是标准的。

使用第一种情况,其中$x周围的引号是可选的:

if [[ "$x" == "valid" ]]; then

或者使用第二种情况:

if [ "$x" = "valid" ]; then

我这样做,是兼容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

或者,如果你不需要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的进一步示例(此处)