Les réponses que vous avez trouvées sur Stack Exchange sont correctes et ce tutoriel est faux. Vous pouvez expérimenter par vous-même ou le rechercher dans la norme . Un unset IFS
équivaut à lui attribuer la valeur par défaut de space-tab-newline, tandis qu'un vide IFS
désactive efficacement la division du champ.
Vous pouvez consulter la page de Sven Mascheck sur IFS à propos des implémentations historiques. Quelques shells historiques n'aimaient pas unset IFS
, et une très ancienne version de ksh le traitait comme un vide IFS
mais tous les shells modernes et la plupart des vieux shells traitaient un unset IFS
comme la valeur par défaut.
Vous ne devez pas commencer votre script à IFS=
moins que vous ne souhaitiez désactiver la division des champs (ce qui peut être une décision raisonnable - mais notez que vous devez toujours mettre des guillemets autour des substitutions pour éviter la globalisation, à moins que vous ne désactiviez cela set -f
également). Pour réinitialiser la valeur par défaut, utilisez unset IFS
. On peut se demander si cela est utile au début d'un script; il y a beaucoup d'autres mauvaises choses, comme une douteuse, PATH
que l'appelant peut faire pour que votre script se passe mal.
Ce tutoriel conseille également de réinitialiser PATH
. C'est généralement un mauvais conseil. Dans la plupart des cas, vous ne pouvez pas prédire le chemin de recherche correct, mais l'utilisateur le sait. Comment savez-vous si /usr/local/bin
ou /home/bob/bin
contient des versions d'utilitaires corrigées de bogues sur un ancien Unix où ceux en /usr/bin
sont bogués? Voulez-vous vraiment intégrer toute la logique pour savoir s'il faut prendre de l' /usr/xpg6/bin
avance /bin
? À quelle position vous voulez /usr/gnu/bin
? Ne réinitialisez pas PATH sauf si votre script cible un système spécifique.
Je n'ai pas lu ce tutoriel, mais j'ai vérifié une chose: il ne vous dit pas dès le départ de toujours mettre des guillemets autour des substitutions de variables et des substitutions de commandes. Je ne pense donc pas que ce tutoriel soit bon.
unset IFS
ne réinitialise pas IFS à sa valeur par défaut dans bash bien qu'il réinitialise le fractionnement de champ.unset IFS
ne réinitialiseIFS
pas sa valeur par défaut, il la désactive. Mais une annulationIFS
a le même effet queIFS
la valeur par défaut.