Y a-t-il un moyen de faire quelque chose comme ça
int a = (b == 5) ? c : d;
en utilisant Bash?
Y a-t-il un moyen de faire quelque chose comme ça
int a = (b == 5) ? c : d;
en utilisant Bash?
Notez que l'opérateur de =
teste l'égalité des chaînes de caractères, pas l'égalité numérique (c'est-à-dire que [[ 05 = 5 ]]
est faux). Si vous voulez une comparaison numérique, utilisez -eq
à la place.
C'est une façon géniale d'utiliser le comportement de court-circuit pour obtenir un effet d'opérateur ternaire :) :) :)
Ceci est mieux que les autres... le point concernant l'opérateur ternaire est qu'il s'agit d'un opérateur, donc son contexte approprié est une expression, il doit donc renvoyer une valeur.
Cela est la façon la plus concise. Soyez conscient que si la partie avec echo "$c"
est une commande aliasée et multi-lignes (comme echo 1; echo 2
), vous devriez l'encadrer de parenthèses.
Cela capturera également toute sortie de la commande testée, aussi (oui, dans ce cas particulier, nous "savons" qu'elle n'en produit pas).
Si la condition vérifie simplement si une variable est définie, il existe même une forme plus courte :
a=${VAR:-20}
assignera à a
la valeur de VAR
si VAR
est défini, sinon il lui attribuera la valeur par défaut 20
- cela peut également être le résultat d'une expression.
Cette approche est techniquement appelée "Expansion de paramètre".
Dans le cas de passer un paramètre de type chaîne de caractères avec des tirets, j'ai dû utiliser des guillemets : a=${1:-'mon-texte-avec-tirets'}
Ceci est bon pour les comparaisons et les affectations numériques, mais cela donnera des résultats imprévisibles si vous l'utilisez pour les comparaisons et les affectations de chaînes de caractères.... (( ))
traite toutes les chaînes de caractères comme 0
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
La réponse de @dutCh montre que
bash
possède quelque chose de similaire à l' "opérateur ternaire" cependant enbash
cela s'appelle l' "opérateur conditionnel"expr?expr:expr
(voirman bash
section "Évaluation arithmétique"). Gardez à l'esprit que l' "opérateur conditionnel" debash
est délicat et comporte certains pièges.0 votes
Bash dispose d'un opérateur ternaire pour les entiers et il fonctionne à l'intérieur de l'expression arithmétique
((...))
. Voir Arithmétique de Shell.1 votes
Tout comme @codeforester l'a mentionné, l'opérateur ternaire fonctionne avec l'expansion arithmétique
$(( ))
et l'évaluation arithmétique(( ))
. Voir aussihttps://mywiki.wooledge.org/ArithmeticExpression
.