Тест POSIX и -a

Я проверил свой скрипт с checkbashisms, и я получил следующие предупреждения:

possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then 

В разделе 4.62.4 спецификаций POSIX я нахожу

primary -a primary Выполняет двоичный код и результаты первичного и первичного. Оператор -a имеет приоритет над оператором -o.

Почему -a и -o считаются не переносимыми?

2 Solutions collect form web for “Тест POSIX и -a”

Это не так, что он не переносимый, но что нет [ реализации, где он надежный, когда передано более 4 аргументов.

Даже в bash:

 $ ALTNAMES='=' bash -c '[ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ]' bash: line 0: [: too many arguments 

В соответствующем разделе говорится:

> 4 аргумента :

Результаты не определены.

[OB XSI] [Начало опции] В системах, совместимых с XSI, комбинации первичных и операторов должны оцениваться с использованием правил приоритета и ассоциативности, описанных ранее. Кроме того, двоичные праймеры сравнения строк «=» и «! =» Должны иметь более высокий приоритет, чем любой унарный первичный. [Вариант завершения]

-a и -o должны быть запрещены. Правильный способ – использовать && и || вместо операторов оболочки :

 if [ -n "$foo" ] && [ -n "$bar" ]; then 

Я даже считаю его более разборчивым.

Потому что они являются расширением XSI, которое может быть реализовано или не реализовано. См .: http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html

  • echo $? возвращает 0 вместо 1
  • Распечатать номера от 1 до 50
  • Сценарий оболочки: если несколько условий
  • xdotool печатает 8 вместо Tab
  • Bash regex, строка соответствия из двух строк
  • Хранение более длинного текстового вывода в памяти в переменных оболочки vs Запись на диск
  • Как создать правило для замены пользовательского флага с помощью оболочки C?
  • rsync bash скрипт "не удалось установить"
  • Как добавить несколько строк с переменными в конец сценария bash?
  • Сценарий оболочки не работает через работу cron
  • Объединение двух частей вместе для создания единого сценария
  • Interesting Posts

    USB-джойстик поддерживает строительство VICE от источника?

    Fedora 28 проблема с vga_switcheroo и проблема ATI Radeon

    Получить адрес и устройство, назначенные openvpn

    Команда терминала для отключения функции доступности ключей мыши

    Linux Mint Cinnamon – беспроводной сетевой адаптер AR9485 продолжает отключать

    Как вставить текущее имя файла в содержимое Vim?

    решение для поворота файлов журналов

    Как исправить предупреждение об ошибке не удалось подключиться к lvmetad, нет такого файла или каталога, возвращающегося к внутреннему сканированию в ubuntu 15.10

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

    Как реализован графический интерфейс Vim, если это программа, работающая на терминале?

    получить столбец из файла на основе другого столбца

    Не удалось установить USB-накопитель, но компьютер видит, что он есть. PNY (MIPS Lemote)

    Почему вывод поиска отсортирован в Cygwin, но не в Solaris?

    Использование потока MJPG в качестве источника веб-камеры

    не может создать символическую ссылку на CentOS 5.6 – Ошибка файла

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