Shell-Scripting: Optionen -z und -n mit if

53

Ich habe ein Shell-Skript, in dem wir folgende Zeilen if [ -z "$xyz" ]und haben if [ -n "$abc" ], aber ich bin nicht sicher, was ihr Zweck ist. Kann jemand bitte erklären?

user3173953
quelle

Antworten:

63

Eine sehr schöne Referenz für bash-Betreiber finden Sie hier . Wenn Sie eine andere Shell verwenden, suchen <my shell> operatorsSie einfach nach und Sie finden alles, was Sie brauchen. In Ihrem speziellen Fall verwenden Sie:

-n
   string is not null.

-z
  string is null, that is, has zero length

Um zu veranschaulichen:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null
terdon
quelle
3

man testoder man [gibt Ihnen alle Optionen zum Testen des Befehls. In diesem Fall prüft -n, ob der Inhalt von $ abc eine Länge ungleich Null hat, und -z prüft, ob der Inhalt von $ xyz eine Zeichenfolge der Länge Null ist.

doneal24
quelle
man [funktioniert bei mir nicht in GNU bash, Version 4.1.2 (1) -release (x86_64-redhat-linux-gnu). Aber +1 für Menschentest.
Andrew Lorien
1
Hinweis man test(immer?) Enthält die Manpage für die externe Programmversion, die (zumindest für die GNU-coreutils-Version) explizit warnt, dass einige (IME-meisten) Shells eine möglicherweise abweichende integrierte Version haben.
Dave_thompson_085