2013-03-05 4 views
5

Voglio avere una grande lista di opzioni nel mio script. L'utente darà input che corrisponderà solo a una di queste opzioni. Voglio essere in grado di avere più opzioni diverse eseguire gli stessi comandi, ma non riesco a far funzionare gli OR. Di seguito è riportato quello che pensavo dovesse essere, qualsiasi idea su come far funzionare la a o b line?Come utilizzare una o una istruzione di commutazione tcl?

switch -glob -- $opt { 
    "a" || "b" { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 

risposta

10

È possibile utilizzare - come corpo di un caso per passare al corpo successivo, come spiegato nella Tcl Manual:

Se un corpo è specificato come “-” significa che il corpo per il prossimo modello dovrebbe essere utilizzato anche come corpo di questo modello (se la prossima modello ha anche una corpo di "-" quindi il corpo dopo che viene utilizzato, e così via). Questa funzione consente di condividere un singolo corpo tra diversi modelli.

Inoltre, se le opzioni sono una grande stringa di caratteri concatentated, si stanno per avere a bookend i vostri modelli di opzione con caratteri jolly, o il vostro casi corrisponderà solo quando opt contiene una sola opzione:

switch -glob -- $opt { 
    "*a*" - 
    "*b*" { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 
+0

Grazie, che è esattamente quello che dovevo sapere. – SuperTetelman

0

lavorando anche questo:

switch -regexp -- $opt { 
    a|b { 
     puts "you selected a or b, probably not both" 
    } 
    default { 
     puts "Your choice did not match anything" 
    } 
} 

Attenzione: spazi tra "a | B"

Problemi correlati