2012-02-28 44 views
1

當我執行這個語法錯誤在[條件表達式使用bash

regex='^[-a-z0-9]+$' 
string='abcd1--' 
if [[ $string =~ $regex ] -a ![ grep - "--" ]] 
then 
    echo "valid" 
else 
    echo "not valid" 
fi 

我得到

~$ sh t.sh 
t.sh: line 3: syntax error in conditional expression 
t.sh: line 3: syntax error near `]' 
t.sh: line 3: `if [[ $string =~ $regex ] -a [ grep - "--" ]]' 
~$ 

這是假設返回not valid

有人能弄清楚有什麼問題嗎?

+2

您的語法爲'[['不正確。 – 2012-02-28 14:39:19

+1

你必須使用bash執行腳本,而不是sh(通常是(d)灰)。沒有使用'test'工具的'=〜'操作符(正被(d)灰使用)。 – Gandaro 2012-02-28 14:49:42

回答

4

您正在以奇怪的方式混合[[[語法。

嘗試:

if [[ ($string =~ $regex) && !($string =~ "--") ]] 

,並檢查bash的手冊頁。

+0

請注意,'/ usr/bin/['不是bash的一部分,它的特殊語法可以用'man test'而不是'man bash'訪問。 – Benoit 2012-02-28 14:49:43

+0

bash確實使用內置的[[如果可以的話]。 (請參閱bash手冊頁的'test expr'部分。) – Mat 2012-02-28 14:52:14

+0

哦,你說得對,有一個'內建測試'命令,我不知道。感謝您指出。 – Benoit 2012-02-28 14:53:22