Supongamos que tengo una variable var
en bash. Puedo asignarle un valor. Por ejemplo, lo convertiré en una cadena:
var="Test"
Quiero echo
el 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
foo
no está definido, pero lofoobar
es, 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.