Quando vi a resposta de David Postill, pensei "deve haver uma solução mais simples". Depois de algumas experiências, encontrei os seguintes trabalhos: -
string='"aString that may haveSpaces IN IT" bar foo "bamboo" "bam boo"'
echo $string
eval 'for word in '$string'; do echo $word; done'
Isso funciona porque eval
expande a linha (removendo as aspas e expandindo string
) antes de executar a linha resultante (que é a resposta imediata):
for word in "aString that may haveSpaces IN IT" bar foo "bamboo" "bam boo"; do echo $word; done
Uma alternativa que se expande para a mesma linha é:
eval "for word in $string; do echo \$word; done"
Aqui string
é expandido entre aspas duplas, mas o $
deve ter escape para que word
não seja expandido antes da linha ser executada (na outra forma, o uso de aspas simples tem o mesmo efeito). Os resultados são: -
[~/]$ string='"aString that may haveSpaces IN IT" bar foo "bamboo" "bam boo"'
[~/]$ echo $string
"aString that may haveSpaces IN IT" bar foo "bamboo" "bam boo"
[~/]$ eval 'for word in '$string'; do echo $word; done'
aString that may haveSpaces IN IT
bar
foo
bamboo
bam boo
[~/]$ eval "for word in $string; do echo \$word; done"
aString that may haveSpaces IN IT
bar
foo
bamboo
bam boo