Схожий на відповідь Jesse_b , але використовуючи змінну опорного імені замість змінної непрямості (потрібно bash
4,3+):
$ declare -n var=test
$ test="my string"
$ echo "$var"
my string
Іменна опорна змінна var
містить ім'я змінної, на яку вона посилається. Коли змінна буде відзначена як $var
, повертається значення іншої змінної.
bash
рекурентно вирішує посилання на імена:
$ declare -n var1=var2
$ declare -n var2=test
$ test="hello world"
$ echo "$var1"
hello world
Для повноти використання асоціативного масиву (в bash
4.0+) також є одним із способів вирішення цього питання, залежно від вимог:
$ declare -A strings
$ strings[test]="my string"
$ var=test
$ echo "${strings[$var]}"
my string
Це забезпечує більш гнучкий спосіб доступу до більш ніж одного значення за допомогою ключа або імені, яке може бути визначено динамічно. Це може бути кращим, якщо ви хочете зібрати всі значення певної категорії в одному масиві, але все ж матимете доступ до них за допомогою якогось ключа (наприклад, імена, доступні за ідентифікатором, або імена шляхів, доступні за призначенням тощо), оскільки це не забруднює мінлива область імен сценарію.