Split single string into character array using ONLY bash
s="hello"
declare -a a # define array a
for ((i=0; i<${#s}; i++)); do a[$i]="${s:$i:1}"; done
declare -p a # print array a in a reusable form
Output:
declare -a a='([0]="h" [1]="e" [2]="l" [3]="l" [4]="o")'
or (please note the comments)
s="hello"
while read -n 1 c; do a+=($c); done <<< "$s"
declare -p a
Output:
declare -a a='([0]="h" [1]="e" [2]="l" [3]="l" [4]="o")'
To split string into array of characters, with null delimiter, you can:
str='hello'
arr=()
i=0
while [ "$i" -lt "${#str}" ]; do
arr+=("${str:$i:1}")
i=$((i+1))
done
printf '%s\n' "${arr[@]}"
With delimiter other than null, you can:
set -f
str='1,2,3,4,5'
IFS=',' arr=($str)
printf '%s\n' "${arr[@]}"
Just for fun (and other shells) other variant:
word=hello
unset letter
while [ ${#word} -gt 0 ]
do
rest=${word#?}
letter[${#letter[*]}]=${word%$rest}
word=$rest
done
And check
for l in "${!letter[@]}"
do
echo "letter [$l] = ${letter[l]}"
done
will print
letter [0] = h
letter [1] = e
letter [2] = l
letter [3] = l
letter [4] = o