2016-01-20 141 views
2

隨着extglob上,我要匹配Case語句與extglob

*()x* 

一個變量(在正則表達式:/^ *x.*/

此:

main(){ 
    shopt -s extglob 
    local line=' x bar' 
    case "$line" in 
    *()x*) ;; 
    *) ;; 
    esac 
} 
main "[email protected]" 

是給我一個語法錯誤。除去extglob圓括號或將main以外的shopt -s extglob移至外部範圍,可以解決問題。 爲什麼?爲什麼shopt -s extglob命令需要在外面?

回答

2

bash有解析功能,以創建它,因爲你使用擴展的水珠語法,通常是無效的,除非extglob是它不能解析功能,當功能創建了

最終結果:extglob在運行時聲明爲時必須位於兩者上。函數中的shopt -s extglob行處理第二個需求,但不是第一個。

順便說一句,還有一些地方,這可能是一個問題。例如,如果你有一個whilefor循環,bash需要在開始運行之前解析整個循環。因此,如果循環中的某些內容使用extglob,則必須在循環開始之前啓用它。

1

您錯過了in關鍵字。

case "$var" in 
    *()x*) echo yes;; 
esac