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?
brew list | grep -q bat && echo 'yes' || echo 'no'
Dieses Beispiel wird bestimmen, ob Sie Homebrew verwendet haben, um bat zu installieren oder noch nicht.
Wenn es wahr ist, sehen Sie "ja"
Wenn es falsch ist, sehen Sie "nein"
Ich habe das -q
hinzugefügt, um die ausgegebene Zeichenfolge von grep
zu unterdrücken, sodass Sie nur "ja" oder "nein" sehen können
doSomethingAndCheckTruth && echo 'yes' || echo 'no'
Getestet mit bash
und zsh
Sieh dir diesen Kommentar an. Wenn das &&
fehlschlägt, wird das ||
ausgeführt, was nicht ganz das gewünschte Verhalten ist.
Meine Antwort hier enthält auch einige ternäre Beispiele: stackoverflow.com/a/62527825/1783588
Hier sind einige Optionen:
1- Verwenden Sie if-then-else in einer Zeile, das ist möglich.
if [[ "$2" == "raiz" ]] || [[ "$2" == '.' ]]; then pasta=''; else pasta="$2"; fi
2- Schreiben Sie eine Funktion so wie diese:
# Es war einmal eine 'iif' Funktion in MS VB ...
function iif(){
# Gibt $2 aus, wenn 1, Banane, wahr, usw. und $3 aus, wenn false, null, 0, ''
case $1 in ''|false|FALSE|null|NULL|0) echo $3;;*) echo $2;;esac
}
Verwenden Sie sie im Skript so:
result=`iif "$expr" 'ja' 'nein'`
# oder sogar interpolieren:
result=`iif "$expr" "positiv" "negativ, weil $1 nicht wahr ist"`
3- Inspiriert von der Fallantwort, ist eine flexiblere und einzeilige Verwendung:
case "$expr" in ''|false|FALSE|null|NULL|0) echo "nein...$expr";;*) echo "ja $expr";;esac
# Der Ausdruck kann etwas sein wie:
expr=`expr "$var1" '>' "$var2"`
Dies ähnelt sehr Vladimirs guter Antwort. Wenn Ihr "ternär" ein Fall von "wenn wahr, String, wenn falsch, leer" ist, dann können Sie einfach tun:
$ c="es waren fünf"
$ b=3
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
$ b=5
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
es waren fünf
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
.