Portál AbcLinuxu, 6. listopadu 2025 19:36
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.
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.
unset array[*]bych nedělal, protože se to expanduje. Když už tak
unset "array[*]"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.