2016-05-17 34 views
2

我的腳本部分採用所有參數並查找任何標誌選項。我試圖將這些保存到我的數組中,但它似乎不匹配。我無法弄清楚,我錯過了什麼?如何匹配bash中的連字符

#!/bin/bash 
ALL_PARAMS=("[email protected]") 

ARGUMENTS=() 

OPTIONS=() 

for i in ${ALL_PARAMS[@]} 

do 

    if [ $i == ^- ] 
    then 
     ARGUMENTS+=($i) 
    else 
     OPTIONS+=($i) 
    fi 
done 

echo ${ARGUMENTS[@]} 
echo ${OPTIONS[@]} 
+0

您是否需要'$ i =〜^ -'來進行正則表達式匹配,而不是'=='? (也許^ - $匹配整個字符串,而不僅僅是開始) – TessellatingHeckler

+0

是的,我搞砸了語法,結束了工作。謝謝! – Boozle

+0

您還應該對變量引用進行雙引號引用(例如'for {i'in「$ {ALL_PARAMS [@]}」')。 –

回答

3

test命令([)並不做正則表達式匹配,則bash關鍵字[[一樣。

您需要:

[[ $i =~ ^- ]] 

還要注意的是,你需要平等操作==的正則表達式運算符=~代替。

+0

當然,正則表達式是矯枉過正。與' - *'匹配的簡單模式可以。 – rici

相關問題