Let's first have a look at the most basic thing, how to define an array:
$ arr=(foo bar baz)
As you can see bash uses no comas for array separators. It simply performs word splitting and assigns "words" to (zero indexed) elements.
Since bash doesn't really share the same pragmatic view on programming as python does it makes it quite ugly to access the members in the first place:
$ echo ${arr[0]}
The braces are required to avoid conflicts with pathname expansion.
Let's explore word splitting further:
$ IFS=, i=(1,2,3); echo "${i[0]}"
1,2,3
The goal here was to assign the comma delimited numbers to the array. The problem is that word spilling isn't performed on strings, so to get that kind of functionality you can use read:
$ IFS=, read -a i <<< 1,2,3; echo "${i[0]}"
1
How about accessing all the members?
If subscript is @ or *, the word expands to all members of name. These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS special variable, and ${name[@]} expands each element of name to a separate word.
What the above really means is for just about any purpose you should use "${arr[@]}".
A cool feature of arrays is that you can apply entire Parameter expansions to them, in this example we are replacing "b" with "uuu":
$ echo "${arr[@]//b/uuu}"
foo uuuar uuuaz
Ever wanted to connect all points of an array in bash?
# define an array
arr=(1 2 3 4)
# set the positional parameters to content of array
set -- "${arr[@]}"
# loop through positional parameters, twice
for i; do
for j; do
echo "$i $j"
done
# this is really the key part, discard
# the element when you are done with it
shift
done