Я надеюсь, что это то, что вы хотите:
firstScript.sh
varname="$1"
if [[ -z $varname ]]; then
echo "usage: $0 varname"
exit
fi
source ./secondScript.sh
declare -n ref="$varname"
echo "varname=$varname value=$ref"
secondScript.sh
foo=2
Затем выполните сценарий с помощью:
./firstScript.sh foo
Вывод:
varname=foo value=2
Опция -n
для declare
создает ссылку на другую переменную. Версия bash должна быть 4.3 или более поздней, чтобы пользоваться этой функциональностью.
[Альтернатива]
Вы также можете написать firstScript.sh
как:
firstScript.sh
varname="$1"
if [[ -z $varname ]]; then
echo "usage: $0 varname"
exit
fi
source ./secondScript.sh
echo "varname=$varname value=${!varname}"
, который даст тот же результат.
Обозначение ${!varname}
называется indirect expansion
, в котором varname
раскрывается как имя переменной.
Оно было введено начиная с bash2.
Надеюсь, это поможет.