Parece que la forma recomendada de hacer configuración de la variable indirecta en bash es utilizar eval
:indirecta asignación de variables en bash
var=x; val=foo
eval $var=$val
echo $x # --> foo
El problema es el habitual con eval
:
var=x; val=1$'\n'pwd
eval $var=$val # bad output here
(y ya que se recomienda en muchos lugares, me pregunto cuántos guiones son vulnerables debido a esto ...)
En cualquier caso, la solución obvia de usin g comillas (escapadas) no funciona muy bien:
var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\" # fail with the above
El caso es que se ha cocido fiesta indirecta referencia variable en (con ${!foo}
), pero no veo tal manera de hacer la asignación indirecta - es Hay alguna forma sensata de hacer esto?
Para el registro, que no encontrar una solución, pero esto no es algo que yo consideraría "sano" ...:
eval "$var='"${val//\'/\'\"\'\"\'}"'"
El direccionamiento indirecto en el lado derecho no es lo que estoy buscando. –
(* frente-bofetada *) Bah, me perdí completamente por qué * quiero * querer indirectamente en el RHS. Como su respuesta no habla en absoluto, la editaré ahora, en lugar de hacer la respuesta-yo-y-palpito-mi-propia-parte posterior ... –
¡Fantástico! En el pasado hice algunas tonterías complicadas de 'eval eval export'. Muchísimas gracias. Para los googlers, ve con la respuesta anterior, no el formato de evaluación eval eval. – bgStack15