2011-10-20 227 views
1

動態Case語句我怎麼會去寫:在猛砸

PreviousInput='@(User1 | User2 | User3)*#channel' 
############################### 
Expression="*${PreviousInput}*" 
case $Input in 
    $Expression) 
     Do_Something ;; 
    *) 
     Do_Something_Else ;; 
esac 

我真的想用一個case語句,因爲我有很多已經投資的case語句邏輯的,真不想重寫它。我在想,我可以使用全局模式,但不知道我會怎麼做。有什麼建議麼?任何幫助表示讚賞。

+0

請修改您的問題,以包含$ {PreviousInput}的示例數據。祝你好運! – shellter

+0

補充說,PreviousInput字符串是動態生成的,所以字符串會改變,但這是一個很好的示例。 – Trcx

+0

根據你之前關於這個主題的問題,你正在使用'shopt -s extglob'?如果你幸運的話,你可能會用「eval」來包裝整個多線的狀態,但是需要一個前導和一個結束的dbl-quote來描述整個事情。如果需要在$ {Expression}值附近添加dbl引號,則需要轉義這些引號,即'\「$ {Expression \」'。所以...''eval「case $ Input在\」$ {Expression | \「)...; esac」'中。並逃離你的'*'。這種方法可以很快得到真正的效果。您必須花時間瞭解eval,shell cmd命令行的評估順序等。祝您好運。 – shellter

回答

0

bash的手冊說:

檢查使用波浪線擴展,參數和 變量擴展,算術替代,命令替換 和工藝替代膨脹每個模式。

所以我看不出有任何理由,你的榜樣不應該是完全等同於

case $Input in 
    *@(User1 | User2 | User3)*#channel*) 
     Do_Something ;; 
    *) 
     Do_Something_Else ;; 
esac 

應該做你想做的,只要你有shopt -s extglob集,shellter說。