Передача переменных внутри переменной во вложенный скрипт - PullRequest
0 голосов
/ 23 мая 2019

Допустим, у меня есть скрипт 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, которые НЕ являются необязательными.

В чем проблема с вышеуказанным подходом и как мне его обойти?

1 Ответ

1 голос
/ 23 мая 2019

Вы можете export переменную FOO, чтобы она была видна для всех вызывающих сценариев:

#!/usr/bin/bash

export FOO="bar"

result=$(./bravo.sh)
echo $result

> foo is bar

Альтернативное решение, если вы хотите, чтобы оно было bravo.sh, а не для всех следующихсценарии:

#!/usr/bin/bash
result=$(export FOO="bar"; ./bravo.sh)
echo $result

result2=$(./bravo.sh)
echo $result2

Вывод будет

> foo is bar
> foo is
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...