Jak vytisknout název proměnné spolu s její hodnotou?

Existuje nějaký způsob, jak mohu vytisknout název proměnné spolu s její hodnotou?

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

Očekávaný výstup (každá proměnná na samostatném řádku):

j = jjj k = kkk l = lll 

Může někdo navrhnout způsob, jak dosáhnout výše uvedeného výsledku?

Komentáře

Odpověď

Jednoduchým způsobem:

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

Výstup:

j = jjj k = kkk l = lll 

  • ${!i} bash proměnná expanze / indirection (získá hodnotu názvu proměnné drženou $i)

komentáře

  • Můžete zkrátit {j,k,l} pomocí {j..l} také :))
  • @ αғsнιη, je to ' přiměřené pro rozšířené rozsahy, pokud existují pouze 3 ems – stačí {j,k,l}
  • j k l.

Odpověď

Pokud máte bash v4.4 nebo novější, můžete použít ${VAR@A} operátor rozšíření parametrů.

Toto je popsáno v příručce k bash v sekci 3.5.3 Rozšíření parametrů shellu

„A“ Operátor

Rozšíření je řetězec ve formě příkazu přiřazení nebo deklaruje příkaz, který, pokud vyhodnocen, znovu vytvoří parametr s jeho atributy a hodnotou.

Takže s tímto můžete:

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

A váš výsledek by měl být:

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

Odpověď

Nebo v zsh použít 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 ) % 

Komentáře

  • funguje také s Bash

Odpověď

Zatímco ${!i} je čistší a rychlejší řešení, pro úplnost nepřímý odkaz lze získat také na následujícím příkladu:

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

Proto:

 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 

Odkazy:

Nepřímé odkazy

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *