Сценарии оболочки: опции -z и -n с помощью if

55

У меня есть сценарий оболочки, где у нас есть следующие строки if [ -z "$xyz" ]и if [ -n "$abc" ], но я не уверен, какова их цель. Кто-нибудь может объяснить, пожалуйста?

user3173953
источник

Ответы:

66

Вы можете найти очень хороший справочник для операторов bash здесь . Если вы используете другую оболочку, просто найдите, <my shell> operatorsи вы найдете все, что вам нужно. В вашем конкретном случае вы используете:

-n
   string is not null.

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

Проиллюстрировать:

$ 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
Тердон
источник
3

man testили man [даст вам все возможности для проверки команды. В этом случае -n проверяет, имеет ли содержимое $ abc ненулевую длину, а -z проверяет, является ли содержимое $ xyz строкой нулевой длины.

doneal24
источник
man [не работает для меня в GNU bash, версия 4.1.2 (1) -релиз (x86_64-redhat-linux-gnu). Но +1 для мужского теста.
Эндрю Лориен
1
Примечание man test(всегда?) Дает справочную страницу для версии внешней программы, которая (по крайней мере для версии GNU-coreutils) явно предупреждает, что некоторые (большинство IME) оболочки имеют встроенную версию, которая может отличаться.
dave_thompson_085