Wäre es nicht schön, wenn 'test' die Option hätte, sofort einen Wert auszugeben? Nur die Option. Das ist alles was wir brauchen würden.
Todd Walton
Antworten:
15
Sie erhalten 0 oder 1. Im Exitcode.
bash-4.2$ test 4-lt 6
bash-4.2$ echo $?0
bash-4.2$ test 4-gt 6
bash-4.2$ echo $?1
Update : Um den Exitcode für die spätere Verwendung zu speichern, weisen Sie ihn einfach einer Variablen zu:
bash-4.2$ test 4-lt 6
bash-4.2$ first=$?
bash-4.2$ test 4-gt 6
bash-4.2$ second=$?
bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1
Gibt es eine Möglichkeit, den Exit-Code weiterzuleiten?
indieman
3
Nein, nur die Ausgabe kann umgeleitet werden. Normalerweise gibt es dafür keine Notwendigkeit. Um es für die spätere Verwendung zu speichern, weisen Sie es einfach einer Variablen zu. Oder sagen Sie uns, was genau Sie mit diesem Wert vorhaben.
Manatwork
2
Der Exit-Code wird in die $?Variable eingefügt - zumindest so lange, bis er vom nächsten ausgeführten Befehl überschrieben wird.
@indieman, wenn Sie basierend auf dem Beendigungsstatus etwas anderes tun müssen, müssen Sie es nicht einmal speichern - verwenden Sie einfachif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard
5
Ein anderer Weg ist
test 4-lt 6&& echo 1|| echo 0
Aber sei in diesem Fall vorsichtig. Wenn testerfolgreich zurückgegeben wird und echo 1fehlschlägt, echo 0wird ausgeführt.
Wenn Sie anstelle eines Exit-Codes das Ergebnis eines Standard-Out-Vergleichs erhalten möchten, können Sie den folgenden expr(1)Befehl verwenden:
$ expr 4'<='61
Zwei Dinge zu beachten:
Sie müssen wahrscheinlich den Operator angeben, da viele von ihnen mit Shell-Metazeichen in Konflikt stehen
Der Ausgabewert ist das Gegenteil des Rückkehrcodes für test. testgibt 0 für true zurück (dies ist der Standard für Exit-Codes), gibt jedoch expr1 für true aus.
3. Es gibt eine testeingebaute Shell, die erheblich schneller ist (ungefähr 50-mal auf meinem Computer) als die ausführbaren Dateien testund expraus dem Paket coreutils .
Manatwork
+1 für den zweiten Punkt. Könnte einen Fehler bekommen, der sehr frustrierend ist, wenn Sie das vermasseln.
Antworten:
Sie erhalten 0 oder 1. Im Exitcode.
Update : Um den Exitcode für die spätere Verwendung zu speichern, weisen Sie ihn einfach einer Variablen zu:
quelle
$?
Variable eingefügt - zumindest so lange, bis er vom nächsten ausgeführten Befehl überschrieben wird.$PIPESTATUS
Array verwenden , um das Ergebnis mehrerer Befehle in einer Pipeline abzurufen.$?
ist das Ergebnis des letzten Befehls in der Pipeline, wenn diepipefail
Option deaktiviert ist (Standardeinstellung).if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Ein anderer Weg ist
Aber sei in diesem Fall vorsichtig. Wenn
test
erfolgreich zurückgegeben wird undecho 1
fehlschlägt,echo 0
wird ausgeführt.quelle
Wenn Sie anstelle eines Exit-Codes das Ergebnis eines Standard-Out-Vergleichs erhalten möchten, können Sie den folgenden
expr(1)
Befehl verwenden:Zwei Dinge zu beachten:
test
.test
gibt 0 für true zurück (dies ist der Standard für Exit-Codes), gibt jedochexpr
1 für true aus.quelle
test
eingebaute Shell, die erheblich schneller ist (ungefähr 50-mal auf meinem Computer) als die ausführbaren Dateientest
undexpr
aus dem Paket coreutils .Sie können den folgenden Befehl eingeben:
quelle