Portál AbcLinuxu, 12. května 2024 11:26


Dotaz: BASH: nacteni radku ze souboru do array

14.8.2007 20:27 jafa | skóre: 1
BASH: nacteni radku ze souboru do array
Přečteno: 3301×
Odpovědět | Admin
Zatim neuspesne bojuju s nacitanim radku ze souboru do pole v BASHi.

Tady je jeden ze zpusobu, ktery se tomu myslim blizi:

#!/bin/bash
cat /etc/fstab | while read line
do
        neco=( "${neco[@]}" "$line" )
        echo "array: ${#neco[@]}"
done
echo ${#neco[@]}

Bohuzel vystup je tomto (mem) pripade:
 ./run_vmmenu.sh
array: 1
array: 2
array: 3
array: 4
array: 5
array: 6
array: 7
array: 8
array: 9
0

Abych to trosku okomentoval, pri kazdem cyklu vypisuji kolik promennych je v poli. V uvedenem pripade to dokazuje, ze se radky do pole skutecne pridavaji. Posledni cislo je ta sama vec, ale po ukonceni cyklu. Tim se dostavam k otazce, proc pole zanikne po skonceni cyklu? Resp. Jak tomu predejit?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.8.2007 21:48 kirpike | skóre: 8 | Plzeň
Rozbalit Rozbalit vše Re: BASH: nacteni radku ze souboru do array
Odpovědět | | Sbalit | Link | Blokovat | Admin
1) Nefunguje to proto, že pro while se pouští další shell, důvodem je použití pipy. cat běží v primárním shellu, ale změny proměných v cyklu se provádí v tom druhém a po jeho ukončení jsou pryč.

2) Pokud jde o problém cyklu, lze to řešit např.
while read x; do
:
done <soubor
nebo
exec 3<soubor
while read line <&3; do
:
done
exec 3<&-
3) Ovšem pro načtení souboru do pole, tak aby jeden prvek = jeden řádek, je nejjednodušší:
bIFS=$IFS IFS=$'\n'
neco=($(cat /etc/fstab))
IFS=$bIFS
15.8.2007 11:54 jafa | skóre: 1
Rozbalit Rozbalit vše Re: BASH: nacteni radku ze souboru do array
Super, dekuji :-)
jose17 avatar 14.8.2007 21:56 jose17 | skóre: 44 | blog: Joseho_blog | Bratislava
Rozbalit Rozbalit vše Re: BASH: nacteni radku ze souboru do array
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://wooledge.org/mywiki/BashFAQ/024
Ja vim, on vi, ty nano!
Josef Kufner avatar 14.8.2007 22:22 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: BASH: nacteni radku ze souboru do array
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus zvážit použití awk. Na takovýhle věci je supr.
Hello world ! Segmentation fault (core dumped)

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.