¿Cómo puedo recuperar un valor de variable bash si tengo el nombre de la variable como cadena?
var1="this is the real value"
a="var1"
Do something to get value of var1 just using variable a.
Contexto:
Tengo algunos AMI ( Amazon Machine Image ) y quiero encender algunas instancias de cada AMI. Tan pronto como terminen de arrancar, quiero configurar cada instancia de acuerdo con su tipo de AMI. No quiero hornear muchos scripts o claves secretas dentro de cualquier AMI, así que preparé un script de inicio generalizado y lo puse en S3 con un enlace de acceso público. En rc.local pongo un pequeño fragmento de código que recupera el script de inicio y lo ejecuta. Esto es todo lo que tengo en las AMI. Luego, cada AMI accede a un script de configuración común que se aplica a todos los AMI y scripts de configuración especiales para cada uno. Estos scripts son privados y requieren una URL firmada para acceder a ellos.
Entonces, cuando disparo una instancia de un AMI (my_private_ami_1), paso una URL firmada para un archivo más presentado en S3 que contiene una URL firmada para todos los scripts privados en términos de par clave / valor.
config_url="http://s3.amazo.../config?signature"
my_private_ami_1="http://s3.amazo.../ami_1?signature"
...
Cuando se ejecuta el script de inicio, descarga el archivo anterior y source
listo. Luego comprueba su tipo de AMI y elige el script de configuración correcto para sí mismo.
ami\_type=GET AMI TYPE #ex: sets ami\_type to my\_private\_ami\_1
setup\_url=GET THE SETUP FILE URL BASED ON AMI\_TYPE # this is where this problem arises
Así que ahora puedo tener un código genérico que puede disparar instancias independientemente de sus tipos de AMI y las instancias pueden cuidarse por sí mismas.
Bad substitution
error./bin/sh
? Si es así, intente usar en su/bin/bash
lugar. De Debian Squeeze en adelante,/bin/sh
se cambió para ser un enlace simbólico endash
lugar debash
.dash
no admite esta sintaxis particular y generará unBad substitution
error.establece Z en "foo"
Tenga cuidado al usarlo,
eval
ya que esto puede permitir la extirpación accidental del código a través de valores en${Y}
. Esto puede causar daño a través de la inyección de código.Por ejemplo
crearía
/tmp/eval-is-evil
. Esto también podría ser algorm -rf /
, por supuesto.fuente
Modifiqué mis palabras clave de búsqueda y lo conseguí :).
Gracias por tu tiempo.fuente
${Y}
. Vea mi adición en la respuesta del usuario "anon".Para mis compañeros usuarios de zsh, la forma de lograr lo mismo que la respuesta aceptada es usar:
${(P)a}
Se llama reemplazo de nombre de parámetro
fuente
los shells modernos ya admiten matrices (e incluso matrices asociativas). Así que por favor úselos y use menos de eval.
entonces cuando quieras llamarlo, echo $ {array [0]}
fuente
$1
)?Basado en la respuesta: https://unix.stackexchange.com/a/111627
fuente
Tuve el mismo problema con las matrices, aquí está cómo hacerlo si también está manipulando matrices:
Esto generará:
fuente