Тест POSIX и-a

Если Вы имеете calc установленный в Вашей системе и Вам не нравится округляться, Вы можете:

div() { calc "$1 / $2"; }
9
08.12.2012, 00:12
2 ответа

Это не так, что это не портативно, но что существует нет [ реализация, где это надежно при передаче больше чем 4 аргумента.

Даже в ударе:

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

Связанные состояния раздела:

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

Результаты являются неуказанными.

[ОБЬ XSI] [Опция Запускается] В XSI-совместимых системах, комбинации основных устройств и операторов должны быть оценены с помощью приоритета и правил ассоциативности, описанных ранее. Кроме того, двоичные основные устройства сравнения строк '=' и"! =", буду иметь более высокий приоритет, чем какое-либо унарное основное устройство. [Конец опции]

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

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

Я даже нахожу это более четким.

11
27.01.2020, 20:06
  • 1
    Благодарит, таким образом, единственное решение состояло бы в том, чтобы иметь два теста? 'если [-n "$ {ALTNAMES}"] && [-n "$ {COMMON_NAME}]; –  Matteo 07.12.2012, 09:52
  • 2
    Не единственный, но конечно лучшее и рекомендуемый как замена для -a и -o –  Stéphane Chazelas 07.12.2012, 10:27
  • 3
    Хорошо большое спасибо (с только я подразумевал, что нет никакого способа иметь единственный тест...). –  Matteo 07.12.2012, 10:40
  • 4
    Да, Вы могли сделать [ "x$ALTNAMES" != x -a "x$COMMON_NAME" != x ] (все еще неуказанный согласно POSIX, но портативный и надежный), или [ "${ALTNAMES:+x}${COMMON_NAME:+x}" = xx ] –  Stéphane Chazelas 07.12.2012, 12:40

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

2
27.01.2020, 20:06

Теги

Похожие вопросы