¿Cómo imprimir el nombre de la variable junto con su valor?


Respuestas:


21

De manera simple:

j="jjj"
k="kkk"
l="lll"

for i in {j,k,l}; do echo "$i = ${!i}"; done

La salida:

j = jjj
k = kkk
l = lll

  • ${!i}- expansión / indirección de la variable bash (obtiene el valor del nombre de la variable en poder de $i)

2
Usted puede hacer {j,k,l}corto con {j..l}también:)
αғsнιη

@ αғsнιη, es razonable para rangos extendidos, siempre y cuando solo haya 3 artículos, {j,k,l}sería suficiente
RomanPerekhrest

1
j k lseria suficiente.
Stéphane Chazelas

6

Si tiene bash v4.4 o posterior, puede usar el ${VAR@A}operador de expansión de parámetros.

Esto se trata en el manual de Bash en la sección 3.5.3 Expansión de parámetros de Shell

Operador 'A'

La expansión es una cadena en forma de una instrucción de asignación o comando de declaración que, si se evalúa, recreará el parámetro con sus atributos y valor.

Entonces con esto puedes hacer:

j="jjj"
k="kkk"
l="lll"

for i in {$j,$k,$l}; do 
    echo "${i@A}"
done

Y su resultado debería ser:

j='jjj'
k='kkk'
l='lll'

5

O en zshusodeclare -p

% j=jjj; k=kkk; l=(l l l)               
% for v in j k l; do declare -p $v; done
typeset j=jjj
typeset k=kkk
typeset -a l=( l l l )
% 

3
también funciona con Bash
Steven Penny

2

Si bien ${!i}es una solución más limpia y rápida, para completar, la referencia indirecta también se puede obtener con el siguiente ejemplo:

 foo=bar
 bar=baz
 $ echo $foo
 bar
 $ eval echo \$${foo}
 baz

Por lo tanto:

 j="jjj"
 k="kkk"
 l="lll"

 for i in {j,k,l}; do
   echo "$i = `eval echo \\$${i}`"
 done

Da:

 j = jjj
 k = kkk
 l = lll

Referencias

Referencias indirectas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.