ссылаться на переменную в другом Linux

У меня есть сценарий test.sh следующим образом

#!/bin/bash echo "$1" 

Я называю этот скрипт из другого скрипта следующим образом

 #!/bin/bash declare -A val val[first]="./test.sh ${value} | grep testing " for KEY in "${!val[@]}"; do value="testing" echo "${val[$KEY]}" done 

echo "${val[$KEY]}" возвращает ./test.sh | grep testing ./test.sh | grep testing

Он не печатает значение переменной значения. Зачем?

Пока ваш скрипт определяет переменную, но не оценивает ее:

Вы назначаете "./test.sh ${value} | grep testing " , но ${value} будет расширяться во время этого назначения. Но на данный момент вы еще не определили value , поэтому оно пустое, а строка становится "./test.sh | grep testing" . Используйте одиночные кавычки ( ' ) вместо двойных кавычек ( " ), чтобы предотвратить расширение оболочки оболочкой:

 './test.sh ${value} | grep testing ' 

Позже вы echo значение переменной. Если вы хотите выполнить команду ./test.sh ... которую вы сохранили в переменной, вам необходимо ее оценить, например

 eval "${val[$KEY]}"