J'utilise un cas de commutation avec des numéros de colonne pouvant aller de 0 à 50. Chaque cas prend désormais en charge le numéro de colonne discret et j'observe son échec.
Voici le code:
i=10
a=1
b=0.65
if [ "$a" != "$b" ]; then
case $i in
[1]|[2]|[5]) echo "Not OK"; ;;
[9-10]|[12]) echo "may be ok"; ;;
*) echo "no clue - $i"; ;;
esac
fi
Je m'attends à ce que ce code produise may be ok
Mais reçoive no clue - 10
.
Bash case
ne fonctionne pas avec les plages de nombres. []
est pour les modèles Shell.
par exemple ce cas [1-3]5|6)
travaillera pendant 15, 25, 35 ou 6 ans.
Votre code devrait ressembler à ceci:
i=10
a=1
b=0.65
if [ "$a" != "$b" ] ; then
case $i in
1|2|5) echo "Not OK"; ;;
9|10|12) echo "may be ok"; ;;
*) echo "no clue - $i"; ;;
esac;
fi
Si i
peut être real
entre 9 et 10, vous devrez utiliser if
(au lieu de la casse) avec des plages.
if
et [
solution
arg=1
if [ "$arg" -lt 5 ]; then
echo 'less than 5'
Elif [ "$arg" -lt 15 ]; then
echo 'less than 15'
Elif [ "$arg" -eq 17 ] || [ "$arg" -eq 19 ]; then
echo '17 or 19'
else
echo 'neither'
fi
POSIX 7
Bash suit POSIX comme indiqué par https://stackoverflow.com/a/25482040/895245
Voici la citation: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 section "Construction conditionnelle à la casse":
Le cas de construction conditionnel exécutera la liste composée correspondant au premier de plusieurs modèles (voir Notation de correspondance de modèle) [...] Plusieurs modèles avec la même liste composée seront délimités par le caractère '|' symbole. [...]
Le format de la construction de cas est le suivant:
case Word in [(] pattern1 ) compound-list ;; [[(] pattern[ | pattern] ... ) compound-list ;;] ... [[(] pattern[ | pattern] ... ) compound-list] esac
et ensuite http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_1 La section "2.13. Notation de correspondance de modèle" dit:
[Si un crochet ouvert introduit une expression de crochet comme dans XBD RE Bracket Expression
et expressions rationnelles étendues pointe vers la section "9.3.5 Expression entre parenthèses RE" qui dit:
Une expression entre crochets (une expression entre crochets, "[]") est une ER qui doit correspondre à un ensemble spécifique de caractères uniques et peut correspondre à un ensemble spécifique d'éléments de classement multi-caractères, en fonction de l'ensemble non vide de liste les expressions contenues dans l'expression entre crochets.
Ainsi, seuls les caractères individuels sont considérés lorsque vous faites quelque chose comme:
[9-10]