Portál AbcLinuxu, 10. května 2025 19:11

Dotaz: bash - pole

24.1.2013 17:45 monika
bash - pole
Přečteno: 857×
Odpovědět | Admin
Ahojky, hraju si a zkousim práci s poli v bashi a nemuzu prijit na jednu vec. Jak vymazat vse, co se v poli nachazi nebo vymazat celou proměnnou, která pole zastupuje? Koukejte:

- nadeklaruju pole "array":

declare -a array

- do toho pole v cyklu dávam hodnoty:

for (( i=1 ;i<=5; i=$i+1 )) do

array[$i]=$i

done

- vypisuju cele pole takhle:

echo ${array[@]}

Co mám udělat, když chci, aby pole "array" neexistovalo, prostě ho vymazat. Tohle mi nefunguje:

array=0

- když bych ted dala echo ${array[@]} , vypíše to stejné hodnoty jako předtím.

Pak bych se ještě zeptala, jaký je rozdíl mezi:

echo ${array[@]}

a

echo ${array[*]}

Obojí vypisuje stejné hodnoty. Děkujuu. Monča.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.1.2013 20:26 l4m4
Rozbalit Rozbalit vše Re: bash - pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
unset array
24.1.2013 21:01 monika
Rozbalit Rozbalit vše Re: bash - pole
áá díky, k unset jsem se dostala, ale nešikovně jsem s ním pracovala (unset array[*] atp).
25.1.2013 14:23 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: bash - pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na okraj: unset array[*] by mělo fungovat také.

Ad rozdíl mezi * a @. Je to stejné jako u expanze parametrů scriptu ($* a $@), tedy pokud máš odkaz na proměnnou v uvozovkách, pak "${pole[*]}" expanduje na jeden dlouhý řetězec se všemi prvky pole (ekvivalent "${pole[0]} ${pole[1]} ...") a "${pole[@]}" vytvoří jeden řetězec pro každou položku pole (tj. zhruba ekvivalent "${pole[0]}" "${pole[1]}" ...).

Smyslem je ošetřit situaci, kdy může být uvnitř nějakého prvku pole mezera anebo jiný oddělovač. Tedy for i in "${pole[@]}"; do ... je "odolný" zápis, naopak for i in ${pole[*]}; do ... se "rozbije" na poli s prvky obsahujícími mezery.
25.1.2013 20:00 l4m4
Rozbalit Rozbalit vše Re: bash - pole
unset array[*]
bych nedělal, protože se to expanduje. Když už tak
unset "array[*]"
25.1.2013 21:58 monika
Rozbalit Rozbalit vše Re: bash - pole
chápu, děkuju! Jen jestli jsem pochopila správně výraz "expanze". Myslí se tím dosazeni?
25.1.2013 23:37 NN
Rozbalit Rozbalit vše Re: bash - pole
Spise 'vyhodnoceni' ..
26.1.2013 00:11 l4m4
Rozbalit Rozbalit vše Re: bash - pole
Dosazení čeho za co?

Mám na mysli expansi. Takhle se tomu říká v manuálu shellu (expansion), takže pro dorozumění se je nejlepší říkat tomu také tak. Konkrétně jsem zde myslel expandování jmen souborů (pathname expansion).
26.1.2013 21:03 monika
Rozbalit Rozbalit vše Re: bash - pole
blbě jsem se vyjádřila, kolega nad Váma to výstižně nazval. Já si napřed představovala, že expanse je něco jako rozvinutí s dosazením. Děkuju poučení.

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.