и всегда эквивалентны?

Мой код выглядит примерно так:

VAR="" while [ -z "$VAR" ]; do VAR=$( command | grep "important_string" ) done 

Поэтому я хочу опросить вывод command , пока не появится важная_строка и не будет помещена в $VAR .

  • Сценарий оболочки Linux: разрешить пользователю указывать имена переменных в приглашении ввода
  • Получить все файлы, кроме файлов в массиве - Bash
  • shell Script: сортировка файлов в каталогах и подкаталогах
  • Как путь к исполняемому набору, если скрипт находится в PATH
  • Как я могу либо зашифровать, либо сделать мой сценарий оболочки нечитаемым?
  • Как изменить каталог из сценария без вызова сценария. ./script или выйти из сценария при вызове. ./script.sh
  • Есть ли функциональная разница между [ -z "$VAR" ] и [ "$VAR" = "" ] ?

  • смотреть файл и сравнивать контрольную сумму
  • Копирование порядка в алфавит в сценарий оболочки
  • Добавить текст в командную строку через скрипт оболочки
  • Необходимо получить последний файл с меткой даты за каждый месяц
  • Нажмите любую клавишу, чтобы остановить цикл
  • Я неправильно использую цикл while?
  • One Solution collect form web for “и всегда эквивалентны?”

    Да, они ( [ -z "$VAR" ] и [ "$VAR" = "" ] …) эквивалентны. Оба тестируют на пустоту $VAR (например, когда она не привязана или не установлена ​​пустая строка).

    Как прокомментировал Селада , при использовании [ "$VAR" = "" ] могут возникнуть плохие вещи, если VAR является допустимым тестом (например, если VAR -z ), в частности, когда [ (или test ) не является встроенной оболочкой. Но на bash или zsh [ является встроенным, и это, похоже, не проблема. Вы можете использовать [ "x$VAR" = "x" ] для своего теста. См. Тест (1)

    Конечно, я предполагаю какую-то оболочку POSIX или что-то подобное.

    Возможно, -z может быть немного быстрее (но вы не должны заботиться о микросекундах в сценариях оболочки), и вы можете найти = возможно, более читабельным.

    Linux и Unix - лучшая ОС в мире.