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


9

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

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

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

bash: ${$var}: bad substitution

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

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

Ответы:


13

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

for i in "$@"; do
    # something
done

Есть ли способ добавить несколько уровней косвенности?
wefwefa3

1
Не то, чтобы я мог быстро найти. Очевидное предположение ${!!var1}не работает. Тем не менее, вы всегда можете сделать это вручную, например tmp=${!var1}; echo ${!tmp}.
Том Хант

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.