Sto cercando di utilizzare una variabile composta da stringhe diverse separate |
da un case
test di istruzione. Per esempio:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Voglio essere in grado di digitare foo
o bar
ed eseguire la prima parte case
dell'istruzione. Tuttavia, entrambi foo
e bar
portami al secondo:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
L'uso "$string"
invece di $string
non fa differenza. Neanche usando string="foo|bar"
.
So di poterlo fare in questo modo:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Mi vengono in mente varie soluzioni alternative, ma vorrei sapere se è possibile utilizzare una variabile come case
condizione in bash. È possibile e, in tal caso, come?
read
pezzo mi ha fermato. a mio avviso, la convalida dell'input dell'utente, che è ciò che sembra essere, i case
modelli non dovrebbero essere in cima all'elenco di valutazione e dovrebbero piuttosto essere eliminati al *
modello predefinito in modo tale che gli unici risultati che vi raggiungono siano garantiti accettabili. tuttavia, poiché il problema è l'ordine di analisi / espansione, una seconda valutazione potrebbe essere ciò che è richiesto.
eval
, sfuggendo $ scelta, le parens, asterisco, punto e virgola, e ritorni a capo. Brutto, ma "funziona".