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

¿Hay alguna forma de que pueda imprimir el nombre de la variable junto con su valor?

j=jjj k=kkk l=lll for i in j k l do .... done 

Resultado esperado (cada variable en una línea separada):

j = jjj k = kkk l = lll 

¿Alguien puede sugerir una forma de obtener el resultado anterior?

Comentarios

Responder

De forma sencilla:

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

El resultado:

j = jjj k = kkk l = lll 

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

Comentarios

  • Puede hacer {j,k,l} corto con {j..l} también:)
  • @ αғsнιη, ' es razonable para rangos extendidos, siempre que solo haya 3 ems – {j,k,l} sería suficiente
  • j k l sería suficiente.

Respuesta

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

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

«A» Operador

La expansión es una cadena en forma de instrucción de asignación o comando de declaración que, si evaluado, volverá a crear 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" 

Respuesta

O en zsh use declare -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 ) % 

Comentarios

  • también funciona con Bash

Answer

Si bien ${!i} es una solución más limpia y rápida, para completar, la La referencia 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 

Gives:

 j = jjj k = kkk l = lll 

Referencias:

Referencias indirectas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *