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
- Kapcsolódó: unix.stackexchange.com/questions/129084/…
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: