Supposons que j'ai une variable var
en bash. Je peux lui attribuer une valeur. Par exemple, je vais en faire une chaîne:
var="Test"
Je veux echo
le nom de var
, pas la valeur détenue par var
. (Je peux faire ce dernier avec echo $var
, mais je veux vraiment faire le premier.)
La réponse à cette question de SO dit d'utiliser echo ${!var}
, mais quand je le fais, je renvoie simplement une ligne vierge. Par exemple, ce script bash
#!/bin/bash
echo "Hi"
var="Test"
echo ${!var}
echo "Bye"
renvoie cette sortie:
Hi
Bye
avec juste une ligne vierge entre Hi et Bye , au lieu de var . Qu'est-ce que je fais mal?
J'utilise bash 4.1.5 (1) sur Ubuntu 10.04.4 .
echo var
?var=Test; Test=SO; echo ${!var}
Réponses:
L' expansion des paramètres shell $ {! Name @} ou $ {! Name *} pourrait faire l'affaire,
Bien que faisable, je ne peux pas imaginer l'utilité de cela ...
la source
foo
n'est pas défini mais l'foobar
est, vous obtiendrezfoobar
. Autres alternatives:var_name=${-+foo}
(ou${foo+foo}
),var_name=$'foo'
,var_name=$"foo"
:-)${!foo@}
serait évaluée àfoo foobar
. Comme le remarque la réponse, son utilité est difficile à imaginer.Si vous souhaitez simplement afficher un nom de variable statique, vous pouvez échapper au
$
signe-:la source
$var
, mais c'est inutile si le nom de la variable est dynamique. Par exemple, supposons que vous ayez besoin de filtrer un ensemble de variables d'environnement commençant par aPREFIX_
, mais vous ne connaissez pas la taille de l'ensemble ou les noms de variables qu'il contient. La solution acceptée convient mieux à ce scénario.