J'essaie d'utiliser une variable composée de différentes chaînes séparées par un |
comme case
test de déclaration. Par exemple:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Je veux pouvoir taper foo
ou bar
et exécuter la première partie de l' case
instruction. Cependant, les deux foo
et bar
amenez-moi au second:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Utiliser "$string"
au lieu de $string
ne fait aucune différence. L'emploi non plus string="foo|bar"
.
Je sais que je peux le faire de cette façon:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Je peux penser à différentes solutions de contournement, mais je voudrais savoir s'il est possible d'utiliser une variable comme case
condition dans bash. Est-ce possible et, si oui, comment?
read
bit m'a arrêté. à mon avis, la validation des entrées utilisateur, ce qui semble être le cas, les case
modèles ne devraient pas être en haut de la liste d'évaluation et devraient plutôt être élagués vers le *
modèle par défaut de sorte que les seuls résultats qui y parviennent soient garantis acceptables. encore, parce que le problème est l'ordre d'analyse / d'extension, alors une deuxième évaluation pourrait être ce qui est demandé.
eval
, en évitant $ choice, les parens, l'astérisque, les points-virgules et les nouvelles lignes. Moche, mais ça "marche".