Функции
Определение
Что? Да! В 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
- в областях видимости: переменные, объявленные в функции, доступны внутри функции; переменные, объявленные в скрипте — доступные в скрипте и последующих вызовах функций
всё остальное тоже самое.
В обратную сторону это тоже верно, скрипт проще и лучше воспринимать как функцию, выполняющую одну отдельную задачу (и желательно думать про области определения и значений).