"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
脚本必须检查 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