Portál AbcLinuxu, 13. května 2024 02:08


Dotaz: BASH zjistit pracovat s array když je název v proměnné?

14.10.2012 02:21 Jakubysko
BASH zjistit pracovat s array když je název v proměnné?
Přečteno: 293×
Odpovědět | Admin
Ahoj, mám pole, a zjišťuji počet položek.
POLE=("nazdar"
      "bazar"
      "ahoj")

CELKEM=${#POLE[*]}
Jak ale udělám to, když název toho pole mám uložený v nějaké proměnné? Poradil by prosím někdo?

Zkoušel jsem to takto ale nejde mi to
NAZEV="POLE10"

CELKEM=${#NAZEV[*]}
Děkuji za pomoc
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.10.2012 09:53 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: BASH zjistit pracovat s array když je název v proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
V kombinaci pole, počítání prvků a nepřímý odkaz mě popravdě nenapadlo jednodušší řešení než pomocí eval. Nevypadá to hezky, protože se dost escapuje, ale funguje to. Protože mi to připadá jako domácí úkol, nepřišlo by mi úplně fér Vám rovnou dát hotové řešení, lepší bývá naťuknout. Kdybyste se zasekl, tak se ozvěte.
http://prirucka.ujc.cas.cz/?ref=785&id=790.
14.10.2012 13:29 Jakubysko
Rozbalit Rozbalit vše Re: BASH zjistit pracovat s array když je název v proměnné?
Zkoušel jsem to i takto ale nejde mi to, proto jsem se ptal zde..
NAZEV="POLE10"

CELKEM=${#${!NAZEV}[*]}
14.10.2012 13:54 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: BASH zjistit pracovat s array když je název v proměnné?
Bash má velmi pokročilé schopnosti při expandování proměnných, ale když toho chcete více najednou (zde: počítat položky pole a nepřímá reference), tak už to nelze libovolně kombinovat. Proto jsem se Vás snažil navést na ten eval. Zkusím požďuchnout ještě o kousek více. Když se podíváte do manu, eval vyhodnotí argumenty a pošle vše shellu zpátky přechroupané. Tzn. vyescapujte to, co chcete, aby prošlo eval dál a nechte ho, aby vám nahradil pouze proměnnou odkazující na jméno pole. Pomohlo to?
14.10.2012 14:04 Jakubysko
Rozbalit Rozbalit vše Re: BASH zjistit pracovat s array když je název v proměnné?
Díky, zeptám se jinde, nemůžu řešit jeden hloupý dotaz 2 dny :(
15.10.2012 07:58 George O.
Rozbalit Rozbalit vše Re: BASH zjistit pracovat s array když je název v proměnné?
Proc by ses ptal jinde, kdyz jsi kvalitni odpoved dostal? Rika se "chytremu napovez, hloupeho kopni" - tebe asi patri kopnout :-)))
David Watzke avatar 14.10.2012 14:09 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH zjistit pracovat s array když je název v proměnné?
Odpovědět | | Sbalit | Link | Blokovat | Admin
NAZEV="POLE"
eval CELKEM='${#'$NAZEV'[*]}'
# nebo
eval CELKEM=\${#$NAZEV[*]}
Ale nejdřív je potřeba zkontrolovat obsah proměnné NAZEV než pustíš ten eval (pokud ho nenastavuješ na konstantu), jinak to je bezpečnostní díra.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.