eval
используется для этого, но если вы сделаете это наивно, будут неприятные проблемы с экранированием. Такого рода вещи, как правило, безопасна:
name_of_variable=abc
eval $name_of_variable="simpleword" # abc set to simpleword
Это ломает:
eval $name_of_variable="word splitting occurs"
Исправление:
eval $name_of_variable="\"word splitting occurs\"" # not anymore
Конечной исправить: поместите текст, который вы хотите назначить в переменную. Назовем это safevariable
. Тогда вы можете сделать это:
eval $name_of_variable=\$safevariable # note escaped dollar sign
Сбрасывание знака доллара разрешает все проблемы с выходом. Знак доллара выживает дословный в функцию eval
, которая будет эффективно выполнять это:
eval 'abc=$safevariable' # dollar sign now comes to life inside eval!
И, конечно, это назначение подверженное всем. safevariable
может содержать *
, пробелы, $
и т.д. (Протест в том, что мы предполагаем, что name_of_variable
не содержит ничего, кроме действительного имени переменной, и один мы свободны использовать:. Не что-то особенное)
Вопрос заключается в том, как непрямое на вычисленных имен переменных, теперь, как назначить выражений фиксированных переменных. – Kaz