Вы правильно поняли.
emulate -R zsh
сбрасывает все параметры на значения по умолчанию для zsh. Флаг -L
делает это локальным для содержащей функции (и, в более общем случае, делает все изменения параметров локальными для функции).
Размещение emulate -LR zsh
в начале определения функции является хорошей гигиеной, когда функция предназначена для использования в контекстах, где параметры потенциально различаются, особенно в интерактивных оболочках.
В данном конкретном случае emulate -LR zsh
не требуется, поскольку на код не влияет ни один параметр. Но это не приносит никакого вреда.
Вот несколько примеров параметров, которые пользователь может установить в своем файле инициализации или которые могут быть отключены окружающим кодом, вызывающим функцию, и которые могут нарушить работу функции:
bare_glob_qual
прерывает использование квалификаторов glob. care_glob
или case_match
сделало бы сопоставление некоторых шаблонов нечувствительным к регистру, даже если это может не иметь смысла в функции. null_glob
и csh_null_glob
влияют на поведение шаблонов подстановок, которые не соответствуют ни одному файлу. numeric_glob_sort
может нарушить работу функции, требующей развертывания шаблонов в лексикографическом порядке. err_exit
и unset
могут вызывать ошибки, когда код функции предполагал поведение по умолчанию (игнорирование статуса команды, обработка неопределенной переменной как пустой).