Uma construção semelhante a IFS= read -r var
é frequentemente vista como uma forma "canônica" no Bash de ler uma linha de entrada em uma variável (por exemplo, em unix.SE ).
É bastante claro por que definir um vazio $IFS
pode ser benéfico em geral, ou seja, para controlar (evitar) a divisão de palavras. No entanto, estou tendo problemas para entender por que isso é especificamente necessário ao ler uma única variável. O manual do bash diz:
Se houver mais palavras do que nomes, as palavras restantes e seus delimitadores intermediários serão atribuídos ao sobrenome
Então, mesmo sem alterar o IFS, se read
for passada uma única variável, não deveria acabar salvando a linha inteira naquela variável, conforme desejado? Qual é o motivo para definir um vazio $IFS
neste caso?
Considere este exemplo (desativando
$IFS
para que o valor padrão seja usado):Ou quando contém um valor diferente (no bash ou em outros shells do tipo POSIX que não sejam zsh):
Este caso é abordado na postagem mencionada na pergunta (ênfase adicionada):