Supongamos que tengo una variable varen bash. Puedo asignarle un valor. Por ejemplo, lo convertiré en una cadena:
var="Test"
Quiero echoel nombre de var, no el valor en poder de var. (Puedo hacer esto último echo $var, pero en realidad quiero hacer lo primero).
La respuesta a esta pregunta de SO dice usar echo ${!var}, pero cuando hago eso, echo solo devuelve una línea en blanco. Por ejemplo, este script bash
#!/bin/bash
echo "Hi"
var="Test"
echo ${!var}
echo "Bye"
devuelve esta salida:
Hi
Bye
con solo una línea en blanco entre Hi y Bye , en lugar de var . ¿Qué estoy haciendo mal?
Estoy ejecutando bash 4.1.5 (1) en Ubuntu 10.04.4 .

echo var?var=Test; Test=SO; echo ${!var}Respuestas:
La expansión del parámetro de shell $ {! Name @} o $ {! Name *} podría hacer el truco,
Aunque sea factible, no puedo imaginar la utilidad de esto ...
fuente
foono está definido, pero lofoobares, obtendráfoobar. Otras alternativas:var_name=${-+foo}(o${foo+foo}),var_name=$'foo',var_name=$"foo":-)${!foo@}se evaluaría comofoo foobar. Como señala la respuesta, su utilidad es difícil de imaginar.Si desea simplemente generar un nombre de variable estática, puede escapar del
$signo -s:fuente
$var, pero es inútil si el nombre de la variable es dinámico. Por ejemplo, supongamos que necesita filtrar un conjunto de variables de entorno que comienzan con aPREFIX_, pero no conoce el tamaño del conjunto o los nombres de las variables que contiene. La solución aceptada es más adecuada para este escenario.