Sto cercando di utilizzare una variabile composta da stringhe diverse separate |da un casetest 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 fooo bared eseguire la prima parte casedell'istruzione. Tuttavia, entrambi fooe barportami al secondo:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
L'uso "$string"invece di $stringnon 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 casecondizione in bash. È possibile e, in tal caso, come?
readpezzo mi ha fermato. a mio avviso, la convalida dell'input dell'utente, che è ciò che sembra essere, i casemodelli 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".