Portál AbcLinuxu, 13. května 2024 02:08
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
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.
NAZEV="POLE10" CELKEM=${#${!NAZEV}[*]}
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?
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.
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.