Мой код выглядит примерно так:
VAR="" while [ -z "$VAR" ]; do VAR=$( command | grep "important_string" ) done
Поэтому я хочу опросить вывод command
, пока не появится важная_строка и не будет помещена в $VAR
.
Есть ли функциональная разница между [ -z "$VAR" ]
и [ "$VAR" = "" ]
?
Да, они ( [ -z "$VAR" ]
и [ "$VAR" = "" ]
…) эквивалентны. Оба тестируют на пустоту $VAR
(например, когда она не привязана или не установлена пустая строка).
Как прокомментировал Селада , при использовании [ "$VAR" = "" ]
могут возникнуть плохие вещи, если VAR
является допустимым тестом (например, если VAR
-z
), в частности, когда [
(или test
) не является встроенной оболочкой. Но на bash
или zsh
[
является встроенным, и это, похоже, не проблема. Вы можете использовать [ "x$VAR" = "x" ]
для своего теста. См. Тест (1)
Конечно, я предполагаю какую-то оболочку POSIX или что-то подобное.
Возможно, -z
может быть немного быстрее (но вы не должны заботиться о микросекундах в сценариях оболочки), и вы можете найти =
возможно, более читабельным.