Hvordan udskrives variabelnavnet sammen med dens værdi?

Er der nogen måde, jeg kan udskrive variabelnavnet sammen med dens værdi?

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

Forventet output (hver variabel på en separat linje):

j = jjj k = kkk l = lll 

Kan nogen foreslå en måde at få ovenstående resultat på?

Kommentarer

Svar

På enkel måde:

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

Outputtet:

j = jjj k = kkk l = lll 

  • ${!i} bash variabel udvidelse / indirektion (får værdien af variabelnavnet i $i)

Kommentarer

  • Du kan gøre {j,k,l} kort med {j..l} også:)
  • @ αғsнιη, det ' er rimeligt for udvidede intervaller, så længe der kun 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 bruge ${VAR@A} Parameterudvidelsesoperator.

Dette diskuteres i Bash-manualen under afsnit 3.5.3 Udvidelse af shellparameter

“A” Operator

Udvidelsen er en streng i form af en tildelingserklæring eller erklær kommando, hvis evalueret, vil genskabe parameter med dets attributter og værdi.

Så med dette kan du gøre:

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

Og dit resultat skal være:

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

Svar

Eller i zsh brug 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

  • fungerer også med Bash

Svar

Mens ${!i} er en renere og hurtigere løsning for fuldstændighed, den indirekte reference kan også opnå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 

Giver :

 j = jjj k = kkk l = lll 

Referencer:

Indirekte referencer

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *