As respostas que você encontrou no Stack Exchange estão corretas e este tutorial está errado. Você pode experimentar sozinho ou pesquisar no padrão . Um unset IFS
é equivalente a defini-lo como o valor padrão de space-tab-newline, enquanto um vazio IFS
desativa efetivamente a divisão de campos.
Você pode consultar a página de Sven Mascheck no IFS sobre implementações históricas. Alguns shells históricos não gostaram unset IFS
e uma versão muito antiga do ksh o tratou como um vazio, IFS
mas todos os shells modernos e a maioria dos shells antigos tratam um IFS
valor não definido como o valor padrão.
Você não deve iniciar seu script a IFS=
menos que queira desativar a divisão de campo (o que pode ser uma decisão razoável - mas observe que você ainda precisa colocar aspas duplas em torno das substituições para evitar globbing, a menos que você o desative set -f
também). Para redefinir o valor padrão, use unset IFS
. É discutível se isso é útil no início de um script; existem muitas outras coisas ruins, como uma desonesta, PATH
que o chamador pode fazer para que seu script dê errado.
Este tutorial também recomenda redefinir PATH
. Isso geralmente é um mau conselho. Na maioria dos casos, você não pode prever qual é o caminho de pesquisa correto, mas o usuário sabe. Como você sabe se /usr/local/bin
ou /home/bob/bin
contém versões de utilitários corrigidas por erros em um unix antigo em que os que /usr/bin
estão com erros? Deseja realmente incorporar toda a lógica para descobrir se deve /usr/xpg6/bin
antecipar /bin
? Em que posição você quer /usr/gnu/bin
? Não redefina PATH, a menos que seu script tenha como alvo um sistema específico.
Não li este tutorial, mas verifiquei uma coisa: desde o início, não é necessário colocar aspas duplas em torno de substituições de variáveis e substituições de comandos. Então, eu não acho que este tutorial seja bom.
unset IFS
não redefine o IFS para seu valor padrão no bash, mas redefine a divisão de campos.