Mais precisamente, deixar uma expansão variável sem aspas, como em $zp
, às vezes é apelidado de operador "split + glob". O que isso faz é:
- Pegue o valor da variável. Essa é uma string.
- Divida esse valor em cada caractere separador de campo. Um caractere separador de campo é aquele que está no valor da variável
IFS
; Por padrão, essa variável contém um espaço , uma guia e uma nova linha . (Esse padrão também é usado se a variável não estiver definida.) O resultado é uma lista de seqüências de caracteres. - Considere cada elemento da lista como um padrão curinga (glob). Se corresponder a um ou mais nomes de arquivo, esse elemento será substituído pela lista de nomes de arquivos correspondentes. Caso contrário, o elemento é deixado em paz.
Por exemplo, se o diretório contiver arquivos chamados foo
, bar
e baz
, o script a seguir imprimirá três linhas: a*
, bar
e baz
.
zq='a* b*'
for word in $zq; do echo "$word"; done
Se você quiser dividir uma string em novas linhas, você pode definir IFS
para uma nova linha e desabilitar a expansão de caracteres curinga.
#!/bin/sh
set -f
IFS='
'
zq=…
for line in $zq; do
…
done
Isso se aplica a todas as variantes sh e csh.
Veja também meu shell script engasga com espaço em branco ou outros caracteres especiais?