signación de variable indirecta en bash

Parece que la forma recomendada de hacer una configuración indirecta de variables en bash es usareval:

var=x; val=foo
eval $var=$val
echo $x  # --> foo

El problema es el habitual coneval:

var=x; val=1

(y como se recomienda en muchos lugares, me pregunto cuántos scripts son vulnerables debido a esto ...)

n cualquier caso, la solución obvia de usar comillas (escapadas) realmente no funciona:

var=x; val=1\"

La cosa es que bash tiene una referencia de variable indirecta incorporada (con${!foo}), pero no veo ninguna forma de hacer una asignación indirecta, ¿hay alguna forma sensata de hacer esto?

Para el registro, encontré una solución, pero esto no es algo que yo consideraría "cuerdo" ...:

eval "$var='"${val//\'/\'\"\'\"\'}"'"
\n'pwd eval $var=$val # bad output here

(y como se recomienda en muchos lugares, me pregunto cuántos scripts son vulnerables debido a esto ...)

n cualquier caso, la solución obvia de usar comillas (escapadas) realmente no funciona:

var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\"  # fail with the above

La cosa es que bash tiene una referencia de variable indirecta incorporada (con${!foo}), pero no veo ninguna forma de hacer una asignación indirecta, ¿hay alguna forma sensata de hacer esto?

Para el registro, encontré una solución, pero esto no es algo que yo consideraría "cuerdo" ...:

eval "$var='"${val//\'/\'\"\'\"\'}"'"
\n'pwd\" eval $var=\"$val\" # fail with the above

La cosa es que bash tiene una referencia de variable indirecta incorporada (con${!foo}), pero no veo ninguna forma de hacer una asignación indirecta, ¿hay alguna forma sensata de hacer esto?

Para el registro, encontré una solución, pero esto no es algo que yo consideraría "cuerdo" ...:

eval "$var='"${val//\'/\'\"\'\"\'}"'"
\n'pwd eval $var=$val # bad output here

(y como se recomienda en muchos lugares, me pregunto cuántos scripts son vulnerables debido a esto ...)

n cualquier caso, la solución obvia de usar comillas (escapadas) realmente no funciona:

var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\"  # fail with the above

La cosa es que bash tiene una referencia de variable indirecta incorporada (con${!foo}), pero no veo ninguna forma de hacer una asignación indirecta, ¿hay alguna forma sensata de hacer esto?

Para el registro, encontré una solución, pero esto no es algo que yo consideraría "cuerdo" ...:

eval "$var='"${val//\'/\'\"\'\"\'}"'"

Respuestas a la pregunta(12)

Su respuesta a la pregunta