UPDATE Por favor, note que fazer um array desta forma é adequado apenas quando o IFS é um único caracter não-whitespace e não existem delimitadores múltiplos-consecutivos na string de dados
Para contornar este problema, e uma solução semelhante, vá para este Unix & Questão do Linux ... (e vale a pena ler apenas para obter mais informações sobre o IFS.
Use o bash (e outras shells POSIX, por exemplo, ash, ksh, zsh) 's IFS
(seperador de campo interno).
O uso do IFS evita uma chamada externa e simplesmente permite espaços incorporados.
# ==============
A='token0:token1:token2.y token2.z '
echo normal. $A
# Save IFS; Change IFS to ":"
SFI=$IFS; IFS=: ##### This is the important bit part 1a
set -f ##### ... and part 1b: disable globbing
echo changed $A
B=($A) ### this is now parsed at : (not at the default IFS whitespace)
echo B...... $B
echo B[0]... ${B[0]}
echo B[1]... ${B[1]}
echo B[2]... ${B[2]}
echo B[@]... ${B[@]}
# Reset the original IFS
IFS=$SFI ##### Important bit part 2a
set +f ##### ... and part 2b
echo normal. $A
# Output
normal. token0:token1:token2.y token2.z
changed token0 token1 token2.y token2.z
B...... token0
B[0]... token0
B[1]... token1
B[2]... token2.y token2.z
B[@]... token0 token1 token2.y token2.z
normal. token0:token1:token2.y token2.z