Gibt es eine Möglichkeit, so etwas zu tun
int a = (b == 5) ? c : d;
mit Bash?
Gibt es eine Möglichkeit, so etwas zu tun
int a = (b == 5) ? c : d;
mit Bash?
Dies wird den Fehler im -e
-Modus trotzdem nicht erkennen: (set -o errexit; [ 5 == 5 ] && { false; true; echo "Erfolg"; } || echo "Fehler"; echo $?; echo "weiterhin";)
-> Erfolg 0 weiterhin
Verwenden Sie das eingebaute :
anstelle von true
, um das Ausführen eines externen Programms mit exec
zu vermeiden.
@ivan_pozdeev Gibt es einen Weg, &&
und ||
zu verwenden und trotzdem einen fehlgeschlagenen Befehl dazwischen zu erkennen?
Wir können im Shell-Skripting für den ternären Operator folgende drei Methoden verwenden:
[ $numVar == numVal ] && resVar="Yop" || resVar="Nop"
Oder
resVar=$([ $numVar == numVal ] && echo "Yop" || echo "Nop")
Oder
(( numVar == numVal ? (resVar=1) : (resVar=0) ))
Aktualisierung: Die Antwort wird für Zeichenkettenberechnungen mit dem unten stehenden Beispiel erweitert. Dies macht Gebrauch von dem zweiten oben genannten Format.
$ strVar='abc';resVar=$([[ $strVar == 'abc' ]] && echo "Yop" || echo "Nop");echo $resVar
Yop
$ strVar='aaa';resVar=$([[ $strVar == 'abc' ]] && echo "Yop" || echo "Nop");echo $resVar
Nop
Das ist meiner Meinung nach tatsächlich (die ersten und zweiten speziell, von diesen drei Beispielen) die passendste Antwort auf diese Frage.
Ein großer Nachteil: Es wird auch die stdout von [ test ]
erfassen. Daher ist die Konstruktion nur sicher zu verwenden, wenn Sie "wissen", dass der Befehl nichts auf stdout ausgibt.
Auch das gleiche wie stackoverflow.com/questions/3953645/ternary-operator-in-bash/… plus die Notwendigkeit, Anführungszeichen zu setzen und Anführungszeichen innerhalb zu escapen. Die version mit tolerantem Leerzeichen sieht so aus VARIABLE="`[ test ] && echo \"VALUE_A\" || echo \"VALUE_B\"`"
.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
@dutCh's Antwort zeigt, dass
bash
tatsächlich etwas Ähnliches wie den "ternären Operator" hat, jedoch wird dies inbash
als "konditionaler Operator"expr?expr:expr
bezeichnet (sieheman bash
Abschnitt "Arithmetische Auswertung"). Beachten Sie, dass derbash
"konditionale Operator" knifflig ist und einige Fallstricke hat.0 Stimmen
Bash verfügt über einen ternären Operator für ganze Zahlen und er funktioniert innerhalb des arithmetischen Ausdrucks
((...))
. Siehe Shell-Arithmetik.2 Stimmen
Genau wie @codeforester erwähnt hat, funktioniert der ternäre Operator mit arithmetischer Expansion
$(( ))
und arithmetischer Auswertung(( ))
. Siehe auchhttps://mywiki.wooledge.org/ArithmeticExpression
.