shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[shell-script-pt] Idiossincrasia do read


From: Arkanon
Subject: [shell-script-pt] Idiossincrasia do read
Date: Wed, 24 Feb 2021 13:12:57 -0300

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,

--
(o_  @arkanon  (Twitter)     __o
//\   arkanon@lsd.org.br   _`\<,
V_/_      www.lsd.org.br  (_)/(_)
---------------------------------

reply via email to

[Prev in Thread] Current Thread [Next in Thread]