Функции


Определение

Что? Да! В shell есть функции:

#!/usr/bin/env sh
 
example() {
	shift 1
	return $1
}
 
example 3 5 || echo $?   # ???

Определение

Функции, как и скрипты, могут быть частью пайплайна:

#!/usr/bin/env sh
 
_cat() {
	cat /etc/passwd
}
 
_cut() {
	cut -d: -f1 
}
 
_cat | head -n 10 | _cut

Библиотека функций

Само объявление функции можно считать командой. Можно воспользоваться этим фактом и тем, что можно попросить текущий шелл исполнить все команды из файла с помощью source:

. script.sh

или

source script.sh

Если в script.sh объявлены функции, то после выполнения . script.sh в текущем шелле они станут доступны для вызова как обычные команды.


Способы абстракции

Функции в shell — почти тоже самое, что и скрипты, написанные на shell.

Разница, наверное, только

  • в использовании команды return вместо exit;
  • в содержимом переменной $0
  • в областях видимости: переменные, объявленные в функции, доступны внутри функции; переменные, объявленные в скрипте — доступные в скрипте и последующих вызовах функций

всё остальное тоже самое.

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