Skrypty powłoki: opcje -z i -n z if

54

Mam skrypt powłoki, w którym mamy następujące wiersze if [ -z "$xyz" ]i if [ -n "$abc" ], ale nie jestem pewien, jaki jest ich cel. Czy ktoś może wyjaśnić?

użytkownik3173953
źródło

Odpowiedzi:

64

Można znaleźć bardzo ładny punkt odniesienia dla operatorów bash jest tutaj . Jeśli używasz innej powłoki, po prostu wyszukaj, <my shell> operatorsa znajdziesz wszystko, czego potrzebujesz. W twoim konkretnym przypadku używasz:

-n
   string is not null.

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

Ilustrować:

$ 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
źródło
3

man testlub man [da ci wszystkie opcje przetestowania polecenia. W tym przypadku -n sprawdza, czy zawartość $ abc ma niezerową długość, a -z sprawdza, czy zawartość $ xyz jest łańcuchem o zerowej długości.

doneal24
źródło
man [nie działa dla mnie w GNU bash, wersja 4.1.2 (1) -release (x86_64-redhat-linux-gnu). Ale +1 za test na człowieka.
andrew lorien
1
Uwaga man test(zawsze?) Podaje stronę podręcznika dla wersji programu zewnętrznego, która (przynajmniej dla wersji GNU-coreutils) wyraźnie ostrzega, że ​​niektóre (większość IME) powłoki mają wbudowaną wersję, która może być inna.
dave_thompson_085,