Почему у ] и ] есть другой синтаксис?

Если я хочу выполнить некоторые команды, заданные переменные не установлены, я использую:

if [[ -z "$a" || -z "$v" ]] then echo "a or b are not set" fi 

Однако тот же синтаксис не работает с -v , я должен использовать:

 if [[ -va && -vb ]] then echo "a & b are set" fi 

Какова история за этим? Я не понимаю, почему синтаксис не будет одинаковым. Я читал, что -v – несколько недавнее дополнение к bash (4.2) ?

2 Solutions collect form web for “Почему у ] и ] есть другой синтаксис?”

Тестирующие операторы -v и -z просто не совпадают.

Оператор -z сообщает, что строка пуста. Так что правда [[ -z "$a" ]] даст хорошее приближение «переменная a не задана», но не идеальна:

  • выражение будет выдавать true, если a задано пустой строкой, а не отменено;

  • приложенный сценарий завершится с ошибкой, если a не установлен и включен параметр nounset .

С другой стороны, -va будет точно «переменная a установлена», даже в случаях краев. Должно быть ясно, что передача $a а не a -v будет неправильной, так как она расширит эту возможную -независимую переменную до того, как оператор проверки увидит ее; поэтому он должен быть частью задачи этого оператора, чтобы проверить эту переменную, на которую указывает ее имя, и указать, установлена ​​ли она.

Есть разница в значении -z и -v :

 echo Empty: x="" # Same with x= [[ -z $x ]] && echo z [[ -vx ]] && echo v unset x echo Unset [[ -z $x ]] && echo z [[ -vx ]] && echo v 

Используя -z , вы не можете отличить переменную, которой было присвоено пустое значение от переменной, которой не было присвоено какое-либо значение.

Кроме того, [[ -z $x ]] по-прежнему разумно set -u , а [[ -vx ]] – нет.

  • Если условие с командой ssh ​​внутри
  • Почему мой скрипт вызывает несколько функций?
  • Логика Bash назад в одной системе, но не другая
  • проблема с Else statment в Bash
  • Тест Bash: что делает «= ~»?
  • ksh, если с несколькими условиями
  • bash howto script - если нет ответа или ответа mutliline
  • Вывести результат печати непосредственно в bash без использования if
  • Есть ли какая-либо существенная разница при сравнении переменной как строки или как int
  • Bash [[соответствие шаблону не работает
  • Какова цель выполнения квадратных скобок
  • Interesting Posts

    Используйте опцию -i на ssh / scp

    Шифрованный USB-накопитель с системой SSH-ключей

    Дружественный ресурс для указания программы пользователя не висит

    Как вы можете изменить команду форматирования, используемую человеком?

    Привод NTFS не установлен в Debian

    Письма не отправляются в один конкретный домен

    Эквивалент «passwd -sa» в RHEL?

    Изменить сообщение об ошибке входа в систему

    виртуальный сетевой интерфейс для клиента ShrewSoft VPN

    Что касается удаления первых 327 строк во всех файлах .dat в папке

    Использование firefox смехотворно медленное с пользователями, имеющими домашний каталог в NFS. Зачем?

    Проверьте, установлен ли CVE-2016-10229 на моем Linux-сервере XEN Debian

    Подскажите пароль на sudo?

    Выключить дисплей и заблокировать экран в диспетчере питания Xfce, когда закрыта крышка ноутбука?

    Есть ли какой-либо автоматический инструмент для установки необходимых библиотек для компиляции программы из источника?

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