Косвенно раскрыть переменные в оболочке

9

Мне нужно косвенно ссылаться на переменную в bashоболочке.

Я в основном хочу, чтобы вы могли сделать make, написав $($(var)).

Я попытался с помощью ${$var}которого было бы самым прямым решением, bashно затем я получаю эту ошибку:

bash: ${$var}: bad substitution

Есть ли способ сделать это?

То , что я пытаюсь сделать , это перебрать все аргументы ( $1, $2, $3...) к программе с помощью переменной итерации , и я не могу сделать это без косвенности.

wefwefa3
источник

Ответы:

13

Если у вас есть var1=fooи foo=bar, вы можете получить bar, сказав ${!var1}. Однако, если вы хотите перебрать позиционные параметры, это почти наверняка лучше сделать

for i in "$@"; do
    # something
done
Том Хант
источник
Есть ли способ добавить несколько уровней косвенности?
wefwefa3
1
Не то, чтобы я мог быстро найти. Очевидное предположение ${!!var1}не работает. Тем не менее, вы всегда можете сделать это вручную, например tmp=${!var1}; echo ${!tmp}.
Том Хант
3

Использование /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar
Ник Грили
источник