As respostas encontradas no Stack Exchange estão corretas e este tutorial está errado. Você pode fazer experiências sozinho ou pesquisá-lo no padrão . Um unset IFS
é equivalente a defini-lo para o valor padrão de space-tab-newline, enquanto um IFS
vazio desativa efetivamente a divisão de campos.
Você pode consultar a página de Sven Mascheck sobre IFS sobre implementações históricas. Algumas shells históricas não gostavam de unset IFS
, e uma versão muito antiga do ksh tratava-a como uma IFS
vazia, mas todas as shells modernas e a maioria das shells antigas tratam uns unset IFS
como o valor padrão.
Você não deve iniciar seu script com IFS=
, a menos que queira desmembrar campos (o que pode ser uma decisão razoável, mas observe que ainda é preciso colocar aspas duplas em torno das substituições para evitar a globulação, a menos que você desative isso com set -f
também). Para redefinir o valor padrão, use unset IFS
. É discutível se isso é útil no início de um script; há muitas outras coisas ruins, como um PATH
desonesto que o chamador pode fazer para errar o seu script.
Este tutorial também aconselha a 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 fixas de bug de utilitários em um antigo unix, onde as que estão em /usr/bin
têm bugs? Você realmente deseja incorporar toda a lógica para descobrir se colocar /usr/xpg6/bin
à frente de /bin
? Em qual posição você quer /usr/gnu/bin
? Não restaure o PATH, a menos que seu script tenha como alvo um sistema específico.
Eu não li este tutorial, mas verifiquei uma coisa: ele não lhe diz desde o começo para sempre 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.