Hogyan lehet kinyomtatni a változó nevét az értékével együtt?

Van valamilyen módja annak, hogy kinyomtassam a változó nevét az értékével együtt?

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

Várható kimenet (minden változó külön sorban):

j = jjj k = kkk l = lll 

Tudna valaki javaslatot tenni a fenti eredmény elérésének módjára?

Megjegyzések

Válasz

Egyszerű módon:

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

A kimenet:

j = jjj k = kkk l = lll 

  • ${!i} bash változó kiterjesztése / indirekciója (megkapja a $i birtokában lévő változó nevének értékét)

Megjegyzések

  • A {j,k,l} rövidítéseket a {j..l} is teheti:)
  • @ αғsнιη, ez ' ésszerű a kiterjesztett tartományokhoz, mindaddig, amíg csak 3 van ems – {j,k,l} elég lenne
  • j k l elég lenne.

Válasz

Ha bash v4.4 vagy újabb verziója van, használhatja a ${VAR@A} Paraméter kibővítő operátort.

Ezt a Bash kézikönyv tárgyalja a 3.5.3 Héjparaméter kibővítése szakaszban.

“A” Operátor

A kibővítés egy karakterlánc hozzárendelési utasítás vagy deklarációs parancs formájában, amely, ha kiértékelve, újra létrehozza a paramétert annak attribútumaival és értékével.

Tehát ezzel megteheti:

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

Az eredménynek pedig a következőknek kell lennie:

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

Válasz

Vagy a zsh mezőben használja a 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 ) % 

megjegyzéseket

  • Bash-szal is működik

Válasz

Míg a ${!i} tisztább és gyorsabb megoldás, a teljesség érdekében a közvetett referencia a következő példával is beszerezhető:

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

Ezért:

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

ad :

 j = jjj k = kkk l = lll 

Hivatkozások:

Indirekt hivatkozások

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük