PessoAll.
Gostaria de comentar um comportamento do build-in read com o qual me deparei hoje pela primeira vez (que eu lembre):
$ echo -n ' a ' | while read -n1; do echo "[$REPLY]"; done
[ ]
[ ]
[a]
[ ]
[ ]
$ echo -n ' a ' | while read -n1 REPLY; do echo "[$REPLY]"; done
[]
[]
[a]
[]
[]
$ echo -n ' a ' | while read -n1 RESP; do echo "[$RESP]"; done
[]
[]
[a]
[]
[]
e
$ echo ' a b ' | while read; do echo "[$REPLY]"; done
[ a b ]
$ echo ' a b ' | while read REPLY; do echo "[$REPLY]"; done
[a b]
$ echo ' a b ' | while read RESP; do echo "[$RESP]"; done
[a b]
MAS
$ echo ' a b ' | while IFS=$'\t\n' read RESP; do echo "[$RESP]"; done
[ a b ]
Ou seja: quando não se indica um nome de variável no read (e portanto o resultado fica armazenado na variável default REPLY), espaços presentes "nas pontas" da string lida não são mantidos. Mesmo indicando uma variável com um nome igual ao default.
Contudo; SE não for indicado um nome de variável para o resultado do read OU for removido o caracter "espaço" do conjunto de caracteres separadores de campo interno (IFS); ENTÃO eventuais espaços "nas pontas" são mantidos.
Não identifiquei nenhuma referência a esse comportamento no man do bash ou no help do read (help read). Será que é um comportamento tão óbvio assim?
Uma rápida pesquisa no Google mostra que mais gente já se deparou com esse problema, assumindo a mesma explicação.
Att,
--