Hvordan skriver jeg ut variabelnavnet sammen med verdien?

Er det noen måte jeg kan skrive ut variabelnavnet sammen med verdien?

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

Forventet utgang (hver variabel på en egen linje):

j = jjj k = kkk l = lll 

Kan noen foreslå en måte å få ovennevnte resultat på?

Kommentarer

Svar

På enkel måte:

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

Utgangen:

j = jjj k = kkk l = lll 

  • ${!i} bash variabel utvidelse / indireksjon (får verdien av variabelnavnet som holdes av $i)

Kommentarer

  • Du kan gjøre {j,k,l} kort med {j..l} også:)
  • @ αғsнιη, det ' er rimelig for utvidede områder, så lenge det bare er 3 det ems – {j,k,l} ville være nok
  • j k l ville være nok.

Svar

Hvis du har bash v4.4 eller nyere, kan du bruke ${VAR@A} Parameterutvidelsesoperator.

Dette er diskutert i Bash-manualen under avsnitt 3.5.3 Skalparameterutvidelse

«A» Operator

Utvidelsen er en streng i form av en oppdragserklæring eller erklærer kommando om at hvis evaluert, vil gjenskape parameter med dets attributter og verdi.

Så med dette kan du gjøre:

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

Og resultatet ditt skal være:

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

Svar

Eller bruk 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 ) % 

Kommentarer i zsh h3>

  • fungerer også med Bash

Svar

Mens ${!i} er en renere og raskere løsning, for fullstendighet, den indirekte referanse kan også fås med følgende eksempel:

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

Derfor :

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

Gir :

 j = jjj k = kkk l = lll 

Referanser:

Indirekte referanser

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *