Portál AbcLinuxu, 12. května 2025 05:33

Dotaz: Bash a read

22.10.2008 10:17 pupala | skóre: 21
Bash a read
Přečteno: 523×
Odpovědět | Admin
Mám časť skriptu, ktorý by mal čítať vstup z terminálu po jednotlivých riadkoch.
Voľba -a by mala načítať vstup do poľa určeného premennou x.
Ale výstup z echo ${$x[0]} je chybná substitúcia, a z echo ${x[0]} je premenná zadaná pri prvom read.
read x
echo "1 $x"
IFS=' '
read -a $x
echo ${$x[0]}
Kde robím chybu? Už som k kombinácii bash manuálu a rôznych článkov o písaní skriptov v ňom pomiešaný.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.10.2008 10:33 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Bash a read
Odpovědět | | Sbalit | Link | Blokovat | Admin
eval echo \${$x[0]}
I am always ready to learn although I do not always like to be taught. (W. Churchill)
23.10.2008 00:16 pupala | skóre: 21
Rozbalit Rozbalit vše Re: Bash a read
Ďakujem
eval echo \${$x[0]} je funkčné len pre to echo.
Ale prečo nie ako for i in eval echo \${"$x"[@]} ?
Pre 5 vstupných prvkov poľa mi cyklus zopakuje len 3 krát.
Pre 5 vstupných prvkov poľa a konštrukciu for i in eval \${"$x"[@]} (bez echo)len 2 krát.
Čo je na tom ešte zle.
Ak namiesto $x zadám do mena poľa namiesto premennej priamo slovo, tak to funguje bez problémov.
22.10.2008 10:39 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Bash a read
Odpovědět | | Sbalit | Link | Blokovat | Admin

Viz manuál – na obsah prvku pole se odkazuje zápisem ${nazevpole[index]}, tedy druhý dolar tam nemá co dělat. Druhá věc, read -a nazevpole zapisuje načtené hodnoty do pole nazevpole. Dolar není(!) součástí názvu proměnné, ten jen značí odkaz na hodnotu proměnné, což tady nechceš (stejně jako např. u přiřazování hodnoty rovnítkem).

22.10.2008 10:50 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Bash a read
Aha, já to pochopil tak, že nebylo účelem odkazovat na název pole nepřímo. Pokud bylo (tedy má se zapisovat do pole, jehož název se přečte ze vstupu), tak platí návod s eval.

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.