Estoy tratando de utilizar una variable que consiste en diferentes cadenas separadas con una |como una caseprueba 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 fooo barejecutar la primera parte de la casedeclaración. Sin embargo, ambos fooy barllévame al segundo:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Usar en "$string"lugar de $stringno 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 casecondición en bash. ¿Es posible y, de ser así, cómo?
readparte me detuvo. en mi opinión, la validación de entrada del usuario, que es lo que parece ser, los casepatrones 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.
evalopción de $ escapándose, los parens, el asterisco, el punto y coma y las nuevas líneas. Feo, pero "funciona".