Cum se imprimă numele variabilei împreună cu valoarea acesteia?

Există vreo modalitate prin care pot imprima numele variabilei împreună cu valoarea acesteia?

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

Ieșire preconizată (fiecare variabilă pe o linie separată):

j = jjj k = kkk l = lll 

Poate cineva să sugereze o modalitate de a obține rezultatul de mai sus?

Comentarii

Răspuns

În mod simplu:

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

Rezultatul:

j = jjj k = kkk l = lll 

  • ${!i} bash extensia / indirectarea variabilei (obține valoarea numelui variabilei deținut de $i)

Comentarii

  • Puteți face {j,k,l} scurt cu {j..l} și:)
  • @ αғsнιη, este ' rezonabil pentru intervale extinse, atâta timp cât există doar 3 ems – {j,k,l} ar fi suficient
  • j k l ar fi suficient.

Răspuns

Dacă aveți bash v4.4 sau o versiune ulterioară, puteți utiliza ${VAR@A} Operator de extindere a parametrilor.

Acest lucru este discutat în manualul Bash în secțiunea 3.5.3 Shell Parameter Expansion

„Un” Operator

Extinderea este un șir sub forma unei instrucțiuni de atribuire sau declară comanda care, dacă evaluat, va recrea parametrul cu atributele și valoarea sa.

Deci, cu aceasta puteți face:

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

Iar rezultatul dvs. ar trebui să fie:

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

Răspuns

Sau în zsh folosiți 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 ) % 

Comentarii

  • funcționează și cu Bash

Răspuns

În timp ce ${!i} este o soluție mai curată și mai rapidă, pentru completitudine, indirectul referința poate fi obținută și cu următorul exemplu:

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

Prin urmare :

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

Dă :

 j = jjj k = kkk l = lll 

Referințe:

Referințe indirecte

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *