eval
se usa para esto, pero si lo haces ingenuamente, habrá problemas de escapes desagradables. Este tipo de cosas es generalmente seguro:
name_of_variable=abc
eval $name_of_variable="simpleword" # abc set to simpleword
Esto rompe:
eval $name_of_variable="word splitting occurs"
La solución:
eval $name_of_variable="\"word splitting occurs\"" # not anymore
La solución final: poner el texto que desea asignar a una variable. Vamos a llamarlo safevariable
. Luego puede hacer esto:
eval $name_of_variable=\$safevariable # note escaped dollar sign
Al escapar del signo de dólar, se resuelven todos los problemas de escape. El signo del dólar sobrevive pie de la letra en la función de eval
, que llevará a cabo con eficacia esta:
eval 'abc=$safevariable' # dollar sign now comes to life inside eval!
Y, por supuesto, esta asignación es inmune a todo. safevariable
pueden contener *
, espacios, $
, etc. (La advertencia es que estamos asumiendo name_of_variable
contiene nada más que un nombre de variable válido, y uno somos libres de usar:. No algo especial)
La cuestión es cómo indirecta sobre los nombres de variables calculadas, ahora cómo asignar expresiones variables fijas. – Kaz