@Jens Booleans sind viel einfacher zu verstehen, wenn Sie es als sehen ! foo(unabhängig davon, ob es in einem ist ifoder nicht).
IQAndreas
@IQAndreas Ich glaube, das ist meistens eine persönliche Präferenz. Zumindest hat Perl ein eingebautes unlessSchlüsselwort und einige Leute mögen es.
Jens
Antworten:
16
!kehrt die Bedeutung des Exit-Status des Befehls um - es ist Teil der POSIX-Shell-Syntax, es ist nicht Teil von if. Aus der POSIX-Spezifikation :
Wenn das reservierte Wort! nicht vor der Pipeline, der Exit-Status ist der Exit-Status des letzten in der Pipeline angegebenen Befehls. Andernfalls ist der Exit-Status das logische NICHT des Exit-Status des letzten Befehls. Das heißt, wenn der letzte Befehl Null zurückgibt, ist der Beendigungsstatus 1; Wenn der letzte Befehl größer als Null zurückgibt, ist der Exit-Status Null.
Nur um die anderen Antworten zu ergänzen, verwendet der Code !, um zu vermeiden, dass der Code wie folgt geschrieben wird:
if foo ;then# everything that used to follow "fi" in the previous versionelse
echo "blah"
exit 1fi
Das funktioniert nur , wenn es ist etwas , nach dem fiim Skript, da eine leere ifKlausel nicht legal ist. (Ein Kommentar zählt nicht.)
Das Schreiben auf diese Weise kostet Sie eine Einrückungsstufe, von der die Leute mit der strukturierten Hardcore- Programmierung sagen, dass es sich lohnt, sie zu bezahlen. Diese Schule der Softwareentwicklung sagt, dass eine exitmitten in einem Programm kaum besser ist als goto end, und da gotoes sich um ein absolutes Übel handelt, ist die zusätzliche Verschachtelungsstufe eine Verbesserung.
Eine konkurrierende Schule sagt: "Ja, Einrückungen sind großartig, bis Sie den gesamten Code von der rechten Seite des Bildschirms entfernt haben."
Dann bekommt man diejenigen, die beide Lager für ein bisschen verrückt halten und einfach beobachten, dass es besser ist, negative Logik zu vermeiden, wenn dies möglich ist, und dass der Normalfall der erste sein sollte, mit Ausnahmen am Ende des Programms.
if !
ist die Kurzform von es sei denn : -Oif !=
! foo
(unabhängig davon, ob es in einem istif
oder nicht).unless
Schlüsselwort und einige Leute mögen es.Antworten:
!
kehrt die Bedeutung des Exit-Status des Befehls um - es ist Teil der POSIX-Shell-Syntax, es ist nicht Teil vonif
. Aus der POSIX-Spezifikation :quelle
Es ist ein boolescher Operator, der dem logischen nicht entspricht .
Siehe
man bash
:Wenn nicht
foo
, geben Sie in Ihrem Beispiel ein Echo anblah
.quelle
Nur um die anderen Antworten zu ergänzen, verwendet der Code
!
, um zu vermeiden, dass der Code wie folgt geschrieben wird:Das funktioniert nur , wenn es ist etwas , nach dem
fi
im Skript, da eine leereif
Klausel nicht legal ist. (Ein Kommentar zählt nicht.)Das Schreiben auf diese Weise kostet Sie eine Einrückungsstufe, von der die Leute mit der strukturierten Hardcore- Programmierung sagen, dass es sich lohnt, sie zu bezahlen. Diese Schule der Softwareentwicklung sagt, dass eine
exit
mitten in einem Programm kaum besser ist alsgoto end
, und dagoto
es sich um ein absolutes Übel handelt, ist die zusätzliche Verschachtelungsstufe eine Verbesserung.Eine konkurrierende Schule sagt: "Ja, Einrückungen sind großartig, bis Sie den gesamten Code von der rechten Seite des Bildschirms entfernt haben."
Dann bekommt man diejenigen, die beide Lager für ein bisschen verrückt halten und einfach beobachten, dass es besser ist, negative Logik zu vermeiden, wenn dies möglich ist, und dass der Normalfall der erste sein sollte, mit Ausnahmen am Ende des Programms.
Wählen Sie Ihre Kool-Hilfe und trinken Sie es.
quelle