2015-10-19 22 views
1

腳本必須檢查OLD_VERSION是否爲空或者是否與某些模式不匹配。我想下面的代碼「或」在bash腳本中

#!/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。

$OLD_VERSION="" 

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

我得到錯誤的輸出。我遇到問題了。我究竟做錯了什麼?

UPDATE:

由sureshvv建議,我更新它想:

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

感謝所有。

+1

定義'錯output' – amdixon

+0

問題更新@amdixon – no1

+0

五月如果你擺脫了雙重否定,就更容易閱讀。所以你可以說如果[-z「$ OLD_VERSION」|| 「$ OLD_VERSION」=〜「$ PATTERN」];然後回顯null或匹配; fi – sureshvv

回答

3

我想你想:

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

謝謝。但我得到了「匹配」,當我做old_version null – no1

+0

當我改變它像「if [[!-z」$ OLD_VERSION「&&!」$ OLD_VERSION「=〜」$ PATTERN「]];然後」 – no1

+0

檢查你是否倒序(回答與你的回聲相反) – amdixon

-1

||由命令[[處理的,所以你必須將其放在[[]]

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

或者它可以用作bash命令失敗鏈運算符。 –