Вы можете использовать косвенное обращение в Bash следующим образом:
INPUT=10
OUTPUT_IN=20
KEYWORD="IN"
var="OUTPUT_$KEYWORD"
echo "${!var}"
Однако вам, вероятно, следует использовать массив или другой метод, чтобы делать то, что вы хотите. От БашЧаВо / 006 :
Размещение имен переменных или любого другого синтаксиса bash внутри параметров, как правило, плохая идея. Это нарушает разделение между кодом и данными; и, как таковая, приводит вас на скользкий путь к ошибкам, проблемам безопасности и т. д. Даже когда вы знаете, что «все правильно», потому что вы «точно знаете и понимаете, что делаете», ошибки случаются со всеми нами, и это окупается. соблюдать правила разделения, чтобы свести к минимуму степень возможного ущерба.
Кроме того, он также делает ваш код неочевидным и непрозрачным.
Обычно в сценариях bash вам вообще не нужны косвенные ссылки. Обычно люди ищут это решение, когда они не понимают или не знают о массивах Bash или еще не полностью рассмотрели другие функции Bash, такие как функции.
И вам следует избегать использования eval
, если это вообще возможно. От БашАФК / 048 :
Если переменная содержит команду оболочки, оболочка может выполнить эту команду независимо от того, хотите вы этого или нет. Это может привести к неожиданным результатам, особенно когда переменные могут быть прочитаны из ненадежных источников (таких как пользователи или созданные пользователем файлы).
Bash 4 имеет ассоциативные массивы, которые позволят вам сделать это:
array[in]=10
array[out]=20
index="out"
echo "${array[$index]}"