Portál AbcLinuxu, 7. května 2025 22:00

Dotaz: Jak naplnit pole pomocí smyčky v bashi

13.1.2012 11:32 Myšpulín | skóre: 8
Jak naplnit pole pomocí smyčky v bashi
Přečteno: 234×
Odpovědět | Admin

Dobrý den,

potřeboval bych poradit, jak naplnit pole pomocí smyčky while. Mám proměnnou $a a proměnnou $b, které obsahují několik řádek textu. Potřeboval bych tyto řádky načíst do dvou polí a pak z těch polí vegenerovat výsledný sformátovaný textový soubor. Zasekl jsem se na tom, že pole se mi sice naplní, ale v momentě, kdy skončí smyčka, tak se vymaže a je prázdné:

p=0

echo "$a" | while read x
do
sablona[$p]="$x"
p=$(( $p+1 ))
done

Během tohoto cylku se pole naplní, každá řádka do jedné pozice. Když do cyklu připíšu echo "${sablona[*]}" tak se krásně vypíše obsah. Když to samé udělám po ukončení cyklu, tak je pole prázdné. Nemohu přijít na to proč. Můžete mi někdo poradit? Děkuji.

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.1.2012 12:15 NN
Rozbalit Rozbalit vše Re: Jak naplnit pole pomocí smyčky v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Promenna, ktara obsahuje retezce oddelene novym radkem se sama chova jako pole, takze staci takto:
echo ${a[@]}
NN
wamba avatar 13.1.2012 13:17 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Jak naplnit pole pomocí smyčky v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
p=0
while read x do
 sablona[$p]="$x"
 p=$(( $p+1 ))
done <<<"$a"
viz. BashFAQ/001

jestli se nepletu tak váš příklad nefunguje kvůli rouře, která spouští nový bash (někdo to možná upřesní)
This would have been so hard to fix when you don't know that there is in fact an easy fix.
13.1.2012 13:20 l4m4
Rozbalit Rozbalit vše Re: Jak naplnit pole pomocí smyčky v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odpověď na původní otázku (proč zmizí proměnná) je, že roura se spouští v subshellu. Dá se to řešit různě, např. nepoužitím roury:
exec <<<"$a"
while read x; do
   ...
done

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.