Функции shell

Определение shell функции оболочки я описывал ранее, когда говорил о Грамматике shell, они сохраняют серию команд для последующего выполнения. Когда имя команды shell функции используется в качестве простого имени команды, список команд, связанных с этим именем функций выполняется. Функции выполняются в контексте текущей оболочки, для их интерпритации не создается новый процесс(это наподобие выполнения shell скрипта). Когда выполняется функция, аргументы функции становятся позиционными параметрами в ходе выполнения. Специальный параметр «#» обновляется в соответствии с изменениями. Специальный параметр «0» остается неизменным. Имя функции, которая выполняется, запоминается в переменной FUNCNAME.

Все иные аспекты командного интерпретатора shell, идентичны функциям вызывающимся со следующими исключениями: DEBUG и RETURN traps не наследуется функция unless с заданным атрибутом trace, или включена shell опция -o functrace с помошью встроенной команды set, и ERR trap не наследуется если shell опция -o errtrace включена.

Локальные переменные функции могут быть объявлены с локальной встроенной командой. Как правило переменные и их значения разделяются на функции и её абонента.

Переменная FUNCNEST если установлена в числовое значение больше 0, определяет максимальный уровень вложенности функций. Вызовы функций, которые превышают лимит вложенности, приводит всю команду к прерыванию.

Если встроенная команда return выполняется внутри функции, функции прекращаются и возобновляются со следующей команды после вызова функции. Любая команда связанная с RETURN trap выполняется до выполнения возобновления. Когда функция завершается, значение позиционных параметров и специального параметра «#» становятся равными значениям, которые были до выполнения функции.

Имена функций и определения могут быть перечислены с опцией -f встроенных команд declare или typeset. declare или typeset с опцией -F перечислит только имена функций(и возможно, исходного файла и номер строки, если включен FUNCNEST а shell опция extdebug). Функции могут экспортироваться так, чтобы подоболочки автоматически имели их определения со встроенной командой export с опцией -f. Определение функции может быть удалено с помощью встроенной команды unset с опцией -f. Обратите внимание что shell функции и переменные с таким же именем могут привести к нескольким одинаковым именам записей в окружающую среду передающейся порожденным shell оболочкам. Следует проявлять осторожность в случаях когда это может привести к проблеме.

Функции могут быть рекурсивными. Переменная FUNCNEST может быть использована для ограничения глубины стека вызовов функций и ограничения количества вызовов функций. По умолчанию не существует никаких ограничений на количество рекурсивных вызовов.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *