Команда оболочки "установить" в Linux и MacOS - PullRequest
0 голосов
/ 07 мая 2020

Я наткнулся на эту небольшую разницу между set реализацией двух операционных систем.

При запуске:

#!/bin/sh

set -eu

echo "${@}"

Запуск этого на MacOS дает следующую ошибку:

@: несвязанная переменная

В то время как запуск этого в среде Linux не приводит к ошибкам, но отображает пустую строку.

Может ли это быть разрешено каким-то образом, за исключением изменения ${@} на ${@:-}, поскольку это может привести к другим результатам, если количество аргументов проверяется в коде.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Оболочка Linux соответствует последнему стандарту POSIX, а оболочка MacOS - нет (см. spe c. , прокрутите вниз до -u ; related: # 0000155 ), отсюда и разница в поведении. Обходной путь:

#!/bin/sh
set -eu
echo "${1+"$@"}"
0 голосов
/ 07 мая 2020

Поскольку у вас есть старая версия bash на macos, вы должны использовать «$ @»

Вы можете проверить версию с помощью:

/bin/sh --version
...