Подтвердить что ты не робот

Bash - переменные переменные

Я имею переменную $foo="something" и хотел бы использовать:

bar="foo"; echo $($bar)

чтобы получить "что-то" эхо.

4b9b3361

Ответ 1

В bash вы можете использовать переменную ${! variable} для использования переменных переменных.

foo="something"
bar="foo"
echo "${!bar}"

Ответ 2

Принятый ответ велик. Тем не менее, @Edison спросил, как сделать то же самое для массивов. Фокус в том, что вы хотите, чтобы ваша переменная держала "[@]", так что массив расширяется с помощью "!". Проверьте эту функцию, чтобы сбрасывать переменные:

$ function dump_variables() {
    for var in "[email protected]"; do
        echo "$var=${!var}"
    done
}
$ STRING="Hello World"
$ ARRAY=("ab" "cd")
$ dump_variables STRING ARRAY ARRAY[@]

Выводится:

STRING=Hello World
ARRAY=ab
ARRAY[@]=ab cd

При задании как только ARRAY, первый элемент показан как тот, который был расширен !. Предоставляя формат ARRAY[@], вы получаете массив и все его значения расширяются.

Ответ 3

eval echo \"\$$bar\" сделает это.

Ответ 4

Чтобы сделать более понятным, как это сделать с массивами:

arr=( 'a' 'b' 'c' )
# construct a var assigning the string representation 
# of the variable (array) as its value:
var=arr[@]         
echo "${!var}"