VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})
Eu preciso ir de uma string para uma matriz onde cada entrada é cada palavra nessa string. Por exemplo, começando com:
VotePedro="Vote for Pedro"
Eu preciso da matriz:
Vote
For
Pedro
Qual eu deveria então ser capaz de repetir como:
for i in "${votePedroArray[@]}"
do
## Do something
done
Quando você deixa uma expansão variável sem aspas, por exemplo $VotePedro
, as seguintes etapas são executadas:
IFS
; por padrão, é espaço, tabulação e nova linha. Assim, você pode dividir uma string em elementos delimitados por espaços em branco (assumindo o valor padrão de IFS
) desligando a expansão de curingas e expandindo uma variável cujo valor é aquela string fora das aspas.
VotePedro="Vote for Pedro"
set -f
votePedroArray=($VotePedro)
set +f
for i in "${votePedroArray[@]}"; do …
Você pode fazer a divisão diretamente no ponto de uso; isso funcionaria mesmo em shells como sh que não possuem arrays:
VotePedro="Vote for Pedro"
set -f
for i in ${votePedro}; do
set +f
…
done
set +f
Além de quebrá-lo em $IFS
, você também pode dividi-lo no que quiser:
set ''
while case $var in
(* *) ;; (*)
! a=("$var$@")
esac
do set '' "${var##* }$@"
var=${var% "$2"}
done
... que permitiria campos nulos separados por espaços em branco, mesmo.
Tags bash shell-script string array