Je recherche la syntaxe correcte de l'instruction switch avec les cas de chute dans Bash (idéalement insensible à la casse). En PHP, je le programmerais comme:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Je veux la même chose dans Bash:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
Cela ne fonctionne pas: la fonction do_what_you_are_supposed_to_do()
doit être déclenchée lorsque $ C vaut 2 OU 3.
bash
switch-statement
Mischka
la source
la source
function fname { echo "Inside fname"; return 0; }
ou l' autre ou enfname() { echo "inside fname"; return 0; }
plaçant des parenthèses sur un appel de fonction, cela peut ressembler à une définition de fonction. Les fonctions doivent être appelées comme tout autre programme de ligne de commande tels quemv
,cp
,rsync
,ls
,cd
, etc ... Dans ce cas , nous appelons FNAME comme ceci:fname $ARGS
.do_nothing()
doit être une déclaration SKIP? Utilisez:
.Réponses:
Utilisez une barre verticale (
|
) pour "ou".la source
[23])
do_what_you_are_supposed_to_do()
, le regroupement de «2» et «3» en un seul cas ne résout pas ce problème. Je ne sais pas s'il est raisonnable de modifier la question pour clarifier les choses, car il est évident que de nombreuses personnes ont trouvé cette réponse utile.break
dans le code php.) Modification de la question, ou son titre, à cette date invaliderait bon nombre des réponses qui ne fournissent retombées par la logique, et ne devrait probablement pas être fait. Fall-through n'était pas dans le titre avant plusieurs modifications par d'autres utilisateurs, mais il est trop tard pour le retirer maintenant.Les
bash
versions récentes permettent de passer par l'utilisation;&
au lieu de;;
: elles permettent également de reprendre les vérifications de cas en utilisant;;&
là.sortie d'échantillon
la source
;&
et;;&
. J'ai changé le"24"
en;;& # resume
et j'ai obtenu les mêmes résultats, donc je me demande toujours quand vous utiliseriez;&
fallthrough.?4
pour[13]4
le rendre plus évident, et pour faire de votre changement un changement radical()
derrière les noms de fonction dans bash sauf si vous souhaitez les définir.[23]
au cas où pour correspondre2
ou3
''
au lieu de""
Si inclus dans
""
, l'interpréteur essaie (inutilement) d'étendre les variables possibles dans la valeur avant la correspondance.Pour une correspondance insensible à la casse, vous pouvez utiliser des classes de caractères (comme
[23]
):Mais
abra
n'a pas frappé à tout moment car il correspondra au premier cas.Si nécessaire, vous pouvez omettre
;;
dans le premier cas de continuer à tester les correspondances dans les cas suivants également. (;;
saute àesac
)la source
case "${C,,}" in
si la casse n'est pas importante;;
? N'êtes-vous pas censé utiliser;&
pour la chute?;;
je dois utiliser;;&
si je veux continuer le test.do_wild_mysterious_things
fait ma journéeEssaye ça:
la source
Si les valeurs sont des nombres entiers, vous pouvez utiliser
[2-3]
ou vous pouvez utiliser[5,7,8]
pour des valeurs non continues.Si les valeurs sont des chaînes, vous pouvez utiliser
|
.la source
shift
fin?shift
supprime le premier argument de la liste des arguments CLI. Fondamentalement, à chaque itération de cette boucle,$1
on utilise toujours pour obtenir chaque argument de la liste d'arguments CLI à l'aide deshift
.