Вероятно, самый простой способ сделать это - изменить переменную окружения IFS
:
OLDIFS="$IFS"
IFS=';'
for num in $a; do echo $num; done
# prints:
1
2
3
4
5
IFS="$OLDIFS"
Не забудьте изменить ее позже, иначе произойдут странные вещи!:)
со страницы руководства bash:
IFS The Internal Field Separator that is used for word splitting
after expansion and to split lines into words with the read
builtin command. The default value is ``<space><tab><new-
line>''.