Portál AbcLinuxu, 10. května 2025 19:11
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.