"or" 在 bash 脚本中

"or" in bash scripting

脚本必须检查 OLD_VERSION 是否不为空或者它是否与某些模式不匹配。我试过下面的代码

#!/bin/bash
OLD_VERSION="ABCDEFGHIJKL"
PATTERN="ABC"
if [[ ! "$OLD_VERSION" =~ "$PATTERN" ]] || [[ ! -z "$OLD_VERSION" ]];
then
    echo "Not matched or not null"
else
    echo "matched or null"
fi

对于以上输入:

 bash -x re.sh
 + OLD_VERSION=ABCDEFGHIJKL
 + PATTERN=ABC
 + [[ ! -z ABCDEFGHIJKL ]]
 + echo 'Not null or doesnot match'

我得到以下输出:

Not null or doesnot match

并且当我将 old_version 设置为 null 时,我得到 Not null or doesnot match,我希望它打印 null。

$OLD_VERSION=""

+ PATTERN=ABC
+ OLD_VERSION=
+ [[ ! -z '' ]]
+ [[ ! '' =~ ABC ]]
+ echo 'Not null or doesnot match'

我得到错误的输出。我在 or 中遇到问题。我做错了什么?

更新:

根据 sureshvv 的建议,我将其更新为:

if [[ ! "$OLD_VERSION" =~ "$PATTERN"  && ! -z "${OLD_VERSION}" ]] ;
then
    echo "Not null or doesnot match"
else
    echo "matched or null"
fi

谢谢大家

||由命令[[处理,所以你必须把它放在[[]]

里面
if [[ ! "$OLD_VERSION" =~ "$PATTERN" || ! -z "$OLD_VERSION" ]];

我想你想要:

if [[ ! -z "$OLD_VERSION" && "$OLD_VERSION" =~ "$PATTERN" ]]; then
    echo Matched
else
    echo No match
fi