Estoy tratando de utilizar una variable que consiste en diferentes cadenas separadas con una |
como una case
prueba de declaración. Por ejemplo:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Quiero poder escribir foo
o bar
ejecutar la primera parte de la case
declaración. Sin embargo, ambos foo
y bar
llévame al segundo:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Usar en "$string"
lugar de $string
no hace ninguna diferencia. Tampoco el uso string="foo|bar"
.
Sé que puedo hacerlo de esta manera:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Puedo pensar en varias soluciones, pero me gustaría saber si es posible usar una variable como case
condición en bash. ¿Es posible y, de ser así, cómo?
read
parte me detuvo. en mi opinión, la validación de entrada del usuario, que es lo que parece ser, los case
patrones no deberían estar en la parte superior de la lista de evaluación, sino que deberían reducirse al *
patrón predeterminado de modo que los únicos resultados que lleguen allí sean garantizados aceptables. aún así, debido a que el problema es el orden de análisis / expansión, entonces una segunda evaluación podría ser lo que se requiere.
eval
opción de $ escapándose, los parens, el asterisco, el punto y coma y las nuevas líneas. Feo, pero "funciona".