Ответы, которые вы нашли на Stack Exchange, верны, а этот урок неверен. Вы можете экспериментировать самостоятельно или посмотреть его в стандарте . Unset IFS
эквивалентно установке его в значение по умолчанию space-tab-newline, в то время как пустое IFS
эффективно отключает разделение полей.
Вы можете обратиться к странице Свена Машека на IFS об исторических реализациях. Несколько исторических оболочек не понравились unset IFS
, и очень старая версия ksh рассматривала его как пустую, IFS
но все современные оболочки и большинство старых оболочек обрабатывают неустановленные значения IFS
как значения по умолчанию.
Вы не должны начинать свой сценарий, IFS=
если только вы не хотите отключить разделение полей (что может быть разумным решением - но учтите, что вам все равно нужно заключать в кавычки двойные кавычки, чтобы избежать сбоев, если только вы не отключите это set -f
тоже). Чтобы сбросить значение по умолчанию, используйте unset IFS
. Это спорный вопрос, является ли полезным в начале сценария; Есть много других плохих вещей, таких как хитрость, PATH
которую вызывающий может сделать, чтобы ваш сценарий пошёл не так.
Этот учебник также советует сбросить PATH
. Обычно это плохой совет. В большинстве случаев вы не можете предсказать, каков правильный путь поиска, но пользователь знает. Как вы знаете , является ли /usr/local/bin
или /home/bob/bin
содержат ошибки фиксированной версии утилита на древней UNIX , где те в /usr/bin
глючат? Вы действительно хотите внедрить всю логику, чтобы понять, стоит ли ее /usr/xpg6/bin
опередить /bin
? На какой позиции вы хотите /usr/gnu/bin
? Не сбрасывайте PATH, если ваш скрипт не нацелен на конкретную систему.
Я не читал этот урок, но проверил одну вещь: он не говорит вам с самого начала всегда ставить двойные кавычки вокруг подстановок переменных и подстановок команд. Поэтому я не считаю этот учебник хорошим.
unset IFS
не сбрасывает IFS к его значению по умолчанию в bash, хотя он сбрасывает разделение полей.