Hallo,
kann ich den ternären Operator auch in der bash anwenden?
Wenn ja, wie muss der gesamte Ausdruck aussehen?
Bei mir werden immer über die Klammern gemeckert ([[ ... ]], [ ...], etc.)
Danke.
ternärer Operator auch in der bash?
ternärer Operator auch in der bash?
Oh, yeah!
- SubOptimal
- Beiträge: 1709
- Registriert: 10.01.2005 23:25:46
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: bei Frankfurt
Re: ternärer Operator auch in der bash?
Hi,
hier ein kleines Beispiel (laut man bash, Abschnitt "ARITHMETIC EVALUATION" und "conditional operator")
SubOptimal
hier ein kleines Beispiel (laut man bash, Abschnitt "ARITHMETIC EVALUATION" und "conditional operator")
Code: Alles auswählen
#!/bin/bash
wert1=23
wert2=42
max=$(( wert2 > wert1 ? wert2 : wert1 ))
echo "wert1=${wert1} wert2=${wert2} max=${max}"
Re: ternärer Operator auch in der bash?
Ok, danke.
Ich möchte gerne sowas realisieren:
1. Funktionsaufruf oder ein Kommando
2. Rückgabewert von $?
3. $? ? "eine Ausgabe mit WAHR" : "FEHLER"
Ich möchte gerne sowas realisieren:
1. Funktionsaufruf oder ein Kommando
2. Rückgabewert von $?
3. $? ? "eine Ausgabe mit WAHR" : "FEHLER"
Oh, yeah!
- SubOptimal
- Beiträge: 1709
- Registriert: 10.01.2005 23:25:46
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: bei Frankfurt
Re: ternärer Operator auch in der bash?
Hi,
in dem Fall würde eher eine der folgenden Varianten passen.
Wenn es nur darum geht Dir Tipparbeit zu ersparen, dann kannst Du auch eine Funktion schreiben. Dieser den Returncode und die beiden Ausgabetexte übergeben und die Entscheidung in der Funktion vornehmen. Wobei das der Lesbarkeit durch andere, eventuell nicht unbedingt zuträglich ist.
Letztlich hängt es aber davon ab, was Du genau erreichen willst.
SubOptimal
in dem Fall würde eher eine der folgenden Varianten passen.
Code: Alles auswählen
#!/bin/bash
# variante 1
if [ $? -eq 0 ]
then.
echo "True"
else.
echo "False"
fi
# variante 2
case $? in
0) echo "True";;
*) echo "False";;
esac
# variante 3
[ $? -eq 0 ] && echo "True" || echo "False"
Letztlich hängt es aber davon ab, was Du genau erreichen willst.
SubOptimal
Re: ternärer Operator auch in der bash?
Kann man die Variante 3 aus deinem Beispiel denn auch mit dem ternären Operator realisieren?
Ich persönlich finde es nicht so schön, wenn man für den Rückgabewert des Status immer eine if-else Anweisung über ca. 10 Zeilen schreibt. Würde sowas lieber in einer Zeile realisieren. Oder wie du schon beschrieben hast, sowas in eine Funktion verpacken und diese aufrufen.
Aber eigentlich möchte ich den ternären Operator dafür verwenden bzw. gerne wissen, wie ich ihn anwenden muss
Ich persönlich finde es nicht so schön, wenn man für den Rückgabewert des Status immer eine if-else Anweisung über ca. 10 Zeilen schreibt. Würde sowas lieber in einer Zeile realisieren. Oder wie du schon beschrieben hast, sowas in eine Funktion verpacken und diese aufrufen.
Aber eigentlich möchte ich den ternären Operator dafür verwenden bzw. gerne wissen, wie ich ihn anwenden muss
Oh, yeah!
- SubOptimal
- Beiträge: 1709
- Registriert: 10.01.2005 23:25:46
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: bei Frankfurt
Re: ternärer Operator auch in der bash?
Siehe meine Antwort:Duff hat geschrieben:Kann man die Variante 3 aus deinem Beispiel denn auch mit dem ternären Operator realisieren?
Nein, es geht nicht.SubOptimal hat geschrieben:hier ein kleines Beispiel (laut man bash, Abschnitt "ARITHMETIC EVALUATION" und "conditional operator")
Wenn es wiederkehrende Texte sind, dann definiere sie doch global.Ich persönlich finde es nicht so schön, wenn man für den Rückgabewert des Status immer eine if-else Anweisung über ca. 10 Zeilen schreibt.
Also mit Zeichenketten und ternärem Operator wird es in der Bash nichts werden.Würde sowas lieber in einer Zeile realisieren. Oder wie du schon beschrieben hast, sowas in eine Funktion verpacken und diese aufrufen.
Und um eine Funktion dafür einzusetzen muss es schon einen wichtigen Grund geben. Es hängt letztlich aber von Deinem Zweck ab. Bring doch mal ein Beispiel, welches Deinem Zweck entspricht, vielleicht gibt es dafür auch eine ganz andere Lösung.
Code: Alles auswählen
#!/bin/bash
# eine globale Variable für den Rückgabewert wird benötigt
set RC
ternary() {
case $1 in
0) RC=$2;;
*) RC=$3;;
esac
}
# Beispiel für einen Prozess der einen Returncode von 0 hat
test 42 -gt 23
ternary $? "True" "False"
echo "process1 status: $RC"
# Beispiel für einen Prozess der einen Returncode von >0 hat
test 23 -gt 42
ternary $? "True" "False"
echo "process2 status: $RC"
Notfalls die Skriptsprache wechseln.Aber eigentlich möchte ich den ternären Operator dafür verwenden bzw. gerne wissen, wie ich ihn anwenden muss
SubOptimal
Re: ternärer Operator auch in der bash?
Schade ;-(SubOptimal hat geschrieben: Also mit Zeichenketten und ternärem Operator wird es in der Bash nichts werden.
Aber danke für das Beispiel.
Oh, yeah!