Допустим, у меня есть скрипт alpha.sh
. Чрезмерно упрощенная версия этого выглядит следующим образом:
#!/usr/bin/bash
ENV_PARAMS_FOR_BRAVO="FOO=bar"
result=$($ENV_PARAMS_FOR_BRAVO bash bravo.sh)
echo $results
А затем скрипт bravo.sh
, чья чрезмерно упрощенная версия:
echo "foo is $FOO"
Когда я запускаю вышеуказанный сценарий alpha
, я получаю сообщение об ошибке, потому что он пытается выполнить $ENV_PARAMS_FOR_BRAVO
, как если бы это была сама команда. Когда я выполняю ту же самую команду, заменяя указанную выше переменную ее содержимым (result=$(FOO=bar bash bravo.sh)
), сценарий работает как ожидалось.
В реальной версии скрипта мне нужно передать намного больше переменных в bravo
из alpha
, поэтому переменная $ENV_PARAMS_FOR_BRAVO
должна служить агрегацией для кураторского списка аргументов для bravo
. Я также не могу передать их bravo
в качестве аргументов, потому что многие из них являются необязательными и будут сдвигать реальные аргументы bravo
, которые НЕ являются необязательными.
В чем проблема с вышеуказанным подходом и как мне его обойти?