Bash OR 运算符不评估多个变量

Bash OR 运算符不评估多个变量

我的 bash 脚本中的以下行无法评估多个 OR 运算符。检查第一个然后继续

if [[ "${SERVER_NAME}" != $BITBUCKET || $CONFLUENCE || $CROWD || $JIRA || $JENKINS ]]; then
other code here...
fi

bash -x脚本上我得到了这个;

+ [[ crowd.server.com != code.server.com ]]

这是$BITBUCKET变量,我$SERVER_NAME需要crowd.server.com 它在继续之前评估所有变量

答案1

这是可以预料的。当运算符的其中一项求 ||值为时true,整个序列的值变为true

尝试使用&&运算符,并根据要比较的字符串多次使用字符串比较运算符。

更好的是,使用case语句:

case "${SERVER_NAME}" in
    "$BITBUCKET" | "$CONFLUENCE" | "$CROWD" | "$JIRA" | "$JENKINS") ;; # do nothing for these servers
    *)
    # your original code here...
    ;;
esac

答案2

我想你想在多个字符串上检查一个字符串。做这个:

if [[ ! "$SERVER_NAME" =~ ^($BITBUCKET|$CONFLUENCE|$CROWD|$JIRA|$JENKINS)$ ]]; then ...

答案3

您无法比较以下或陈述中的任何内容。考虑一下:

#!/bin/bash

if [[ $1 == "foo" || $1 == "bar" ]]; then
    echo "foo or bar"
else
    echo "not foo or bar"
fi

执行后看起来像这样:

./orTest.sh bar
foo or bar
./orTest.sh foo
foo or bar
./orTest.sh foobar
not foo or bar

换句话说,@Dmitry Grigoryev 写道:

使用字符串比较运算符的次数与要比较的字符串的次数一样多

这是错误的

#!/bin/bash

if [[ $1 == "foo" || "bar" ]]; then
    echo "foo or bar"
else
    echo "not foo or bar"
fi

例子:

/orTestFail.sh bar
foo or bar
./orTestFail.sh foo
foo or bar
./orTestFail.sh foobar
foo or bar

相关内容