Аргументы функции

Тема дорожной карты · Bash

Аргументы функций в Bash позволяют передавать данные в shell-функцию во время вызова; внутри функции они доступны через позиционные параметры, такие как $1, $2 и так далее. Специальная переменная $@ раскрывается во все аргументы функции как отдельные слова, а $# содержит их общее количество, что упрощает написание гибких утилит в shell-скриптах Linux. В отличие от многих языков программирования, аргументы функций Bash не имеют именованных параметров в сигнатуре — вызывающий код просто передаёт значения, а функция читает их по позиции. Использование переменных local вместе с аргументами функции является рекомендуемой практикой написания shell-скриптов для предотвращения загрязнения глобальной области видимости временными значениями. Глубокое понимание аргументов функций — ключевой элемент написания многократно используемых и удобных в сопровождении скриптов автоматизации Bash на Linux.

Как это работает

Аргументы функции: function_name() { commands; } определяет функцию. Аргументы — $1, $2, …, $@. Возвращаемые значения — через exit-код (return N); для реальных данных echo в stdout + захват через $(func). Локальные переменные: local var=value. Функции не first-class — нельзя передавать, нет closures (shell не язык программирования в этом смысле).

Когда применять

Выносите функцию, когда (а) блок повторяется, (б) у него есть осмысленное имя. local для всех внутренних переменных функции (иначе утекают в caller). Echo данных + захват лучше установки глобальных vars + чтения. Не используйте функции для "скорости" — bash-вызовы функций дороги vs C; для горячих циклов перепишите на настоящем языке.

Типичные ошибки

Ловушки Аргументы функции: забыли local и случайно модифицируют caller's $i (переменная цикла утекает); return "string" (return принимает только exit-код 0-255); функция зависит от cwd / глобального state без явного input (тяжело тестировать).

Связанные понятия

Полезные ресурсы