2010-03-16 46 views
0

現在我無法解決這個問題。當我閱讀手冊和教程時,我越來越困惑。我想要一條if語句,其邏輯如下:在bash中混合正則表達式和其他條件表達式if語句

if [ -n $drupal_version ] && [[ "$drupal_version" =~ DRUPAL-[6-9]-[1-9][1-9] ]]; then 

但我無法讓它正常工作。

當使用「bash -x ...」腳本構造評估腳本時,可以正常工作,但是當作爲常規腳本運行時,我的表達式不會被評估(即使上述條件應該被滿足, )。

你能提供任何幫助嗎?

+0

什麼版本的Bash? – 2010-03-16 11:42:21

回答

0

你可以使用case/esac,沒有正則表達式。可以在bash使用< 3.2

if [ -n "$drupal_version" ] ;then 
    case "$drupal_version" in 
    DRUPAL-[6-9]-[1-9][1-9]) 
     echo "found" 
     ;; 
    *) 
     echo "version not correct" 
     ;; 
    esac 
fi 

但是,如果你想正則表達式,並注意它的=~沒有=

[[ $drupal_version =~ DRUPAL-[6-9]-[1-9][1-9] ]] && echo "found" 
+0

案例方法是一個有趣的方法。使用「=」是我的一個錯字,在我的代碼中使用了「=〜」。將單個括號[與雙括號[[在相同的if語句中混合使用時有問題嗎? – Tassos 2010-03-16 09:42:34

+0

不,沒有問題,但是''''和']]'之間有一些區別,如果你使用'''',引用你的變量,你可以看到http://serverfault.com/questions/52034/what-is-the-difference -between-雙和單方括號合的bash – ghostdog74 2010-03-16 10:05:56

0

謝謝大家的回覆。雙括號]]是一個特定於bash的構造,而這又需要腳本的第一行指向#!/ bin/bash,而不是#!/ bin/sh。改變了這條線,一切正常。