Я имею переменную $foo="something" и хотел бы использовать:
bar="foo"; echo $($bar)
чтобы получить "что-то" эхо.
Ответ 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}"