Jak wydrukować nazwę zmiennej wraz z jej wartością?

Czy istnieje sposób, w jaki mogę wydrukować nazwę zmiennej wraz z jej wartością?

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

Oczekiwane dane wyjściowe (każda zmienna w osobnym wierszu):

j = jjj k = kkk l = lll 

Czy ktoś może zaproponować sposób uzyskania powyższego wyniku?

Komentarze

Odpowiedź

W prosty sposób:

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

Wyjście:

j = jjj k = kkk l = lll 

  • ${!i} bash interpretacja / pośrednia zmienna (pobiera wartość nazwy zmiennej przechowywanej przez $i)

Komentarze

  • {j,k,l} możesz skrócić za pomocą {j..l} również:)
  • @ αғsнιη, ' jest rozsądne dla rozszerzonych zakresów, o ile są tylko 3 ems – wystarczyłoby {j,k,l}
  • j k l wystarczy.

Odpowiedź

Jeśli masz bash w wersji 4.4 lub nowszej, możesz użyć ${VAR@A} operatora rozszerzania parametrów.

Jest to omówione w podręczniku Bash w sekcji 3.5.3 Rozszerzenie parametrów powłoki

„A” Operator

Interpretacja jest ciągiem znaków w postaci instrukcji przypisania lub deklaracji polecenia, jeśli ocenione, ponownie utworzy parametr wraz z jego atrybutami i wartością.

Dzięki temu możesz zrobić:

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

A Twój wynik powinien wyglądać następująco:

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

Odpowiedź

Lub w zsh użyj 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 ) % 

Komentarze

  • działa też z Bashem

Odpowiedź

Chociaż ${!i} jest czystszym i szybszym rozwiązaniem, aby zapewnić kompletność, pośredni odniesienie można również uzyskać za pomocą następującego przykładu:

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

Dlatego :

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

Daje:

 j = jjj k = kkk l = lll 

Referencje:

Odnośniki pośrednie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *