É mais fácil com zsh
:
string=WER
array=(${(s::)string})
printf '<%s>\n' $array
(observe que os índices de array em zsh
começam em 1 como na maioria dos outros shells, não em 0 como em bash
/ ksh
).
Ou com fish
(os arrays também começam em 1):
set string WER
set array (string split '' $string)
printf '<%s>\n' $array
(assume que $string
não contém caracteres de nova linha).
POSIXly (o shell POSIX tem um array: $@
(também começa em 1: $1
)), assim também funcionaria em bash
ou zsh
e o padrão do seu sistema sh
:
string=WER
set --
while [ -n "$string" ]; do
tmp=${string#?}
set -- "$@" "${string%%"$tmp"}"
string=$tmp
done
printf '<%s>\n' "$@"
Com csh
ou tcsh
que você parece estar usando:
set string = WER
set array = "'printf '%s\n' $string:q | fold -w1'"
printf '<%s>\n' $array:q
Assim como para fish
, ele também assume que a string não contém caracteres de nova linha. Observe também que algumas implementações de fold
serão dobradas em bytes em vez de caracteres, o que significa que não funcionará corretamente se a string contiver caracteres de múltiplos bytes.