Если Вы имеете calc
установленный в Вашей системе и Вам не нравится округляться, Вы можете:
div() { calc "$1 / $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
Я даже нахожу это более четким.
Поскольку они - расширение XSI, которое может или не быть реализованным. См.: http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html
-a
и-o
– Stéphane Chazelas 07.12.2012, 10:27[ "x$ALTNAMES" != x -a "x$COMMON_NAME" != x ]
(все еще неуказанный согласно POSIX, но портативный и надежный), или[ "${ALTNAMES:+x}${COMMON_NAME:+x}" = xx ]
– Stéphane Chazelas 07.12.2012, 12:40