There is another small bug in the text. Basically, the situation is similar to the difference between $* and "$@". If you evaluate arrays to get all elements with * symbol, then it's ok to write ${array[*]}. But in case of @ symbol, it always has to be used with double quotes such as "${array[@]}". It's not so critical until there are elements with space symbol, because then you'll lose a real value of a particular element.
Here is an example:
$ array1=(1 "two three" 4 five)
$ for i in ${array1[*]}; do echo ${i}; done
1
two
three
4
five
$ for i in ${array1[@]}; do echo ${i}; done
1
two
three
4
five
$ for i in "${array1[@]}"; do echo ${i}; done
1
two three
4
five
There is another small bug in the text. Basically, the situation is similar to the difference between $* and "$@". If you evaluate arrays to get all elements with * symbol, then it's ok to write ${array[*]}. But in case of @ symbol, it always has to be used with double quotes such as "${array[@]}". It's not so critical until there are elements with space symbol, because then you'll lose a real value of a particular element.
Here is an example:
$ array1=(1 "two three" 4 five)
$ for i in ${array1[*]}; do echo ${i}; done
1
two
three
4
five
$ for i in ${array1[@]}; do echo ${i}; done
1
two
three
4
five
$ for i in "${array1[@]}"; do echo ${i}; done
1
two three
4
five