簡體   English   中英

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或不匹配,我希望它打印為null。

$OLD_VERSION=""

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

我得到錯誤的輸出。 我在或中遇到問題。 我究竟做錯了什么?

更新:

根據sureshvv的建議,我將其更新為:

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

謝謝大家

我想你要:

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

|| 由命令[[處理,因此您必須將其放入[[]]

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM