ссылаться на переменную в другом 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

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

One Solution collect form web for “ссылаться на переменную в другом Linux”

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

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

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

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

 eval "${val[$KEY]}" 
  • Что означает PROG = $ {0 ## * /} в сценарии bash?
  • Как установить необязательный параметр?
  • Может ли кто-нибудь сказать мне, что случилось с этим скриптом unix?
  • Почему BASH печатал «bash: cd: write error: Success»?
  • Остановка во время баха
  • Как узнать, длится ли один час через несколько сценариев оболочки?
  • Ошибка: команда не найдена
  • Может ли bash распознавать объявление переменной как строку, если вы не ставите кавычки?
  • Как встроить групповой шаблон в bash?
  • Выполнить строку с переменными как команду
  • Как использовать два операнда в левой части оператора сравнения в Bash
  • Linux и Unix - лучшая ОС в мире.