Искусство программирования на языке сценариев командной оболочки


Программирование на языке сценариев командной оболочки - стр. 231


command...

}

или

function_name () {

command...

}

Вторая форма записи ближе к сердцу C-программистам (она же более переносимая).

Как и в языке C, скобка, открывающая тело функции, может помещаться на следующей строке.

function_name ()

{

command...

}

Вызов функции осуществляется простым указанием ее имени в тексте сценария.

Пример 22-1. Простая функция

#!/bin/bash

funky () { echo "Это обычная функция." } # Функция должна быть объявлена раньше, чем ее можно будет использовать.

# Вызов функции.

funky

exit 0

Функция должна быть объявлена раньше, чем ее можно будет использовать. К сожалению, в Bash нет возможности "опережающего объявления" функции, как например в C.

f1 # Эта строка вызовет сообщение об ошибке, поскольку функция "f1" еще не определена.

declare -f f1 # Это не поможет. f1 # По прежнему -- сообщение об ошибке.

# Однако...

f1 () { echo "Вызов функции \"f2\" из функции \"f1\"." f2 }

f2 () { echo "Функция \"f2\"." }

f1 # Функция "f2", фактически, не вызывается выше этой строки, #+ хотя ссылка на нее встречается выше, до ее объявления. # Это допускается.

# Спасибо S.C.

Допускается даже создание вложенных функций, хотя пользы от этого немного.

f1 () {

f2 () # вложенная { echo "Функция \"f2\", вложенная в \"f1\"." }

}

f2 # Вызывает сообщение об ошибке. # Даже "declare -f f2" не поможет.

echo

f1 # Ничего не происходит, простой вызов "f1", не означает автоматический вызов "f2". f2 # Теперь все нормально, вызов "f2" не приводит к появлению ошибки, #+ поскольку функция "f2" была определена в процессе вызова "f1".

# Спасибо S.C.

Объявление функции может размещаться в самых неожиданных местах.

ls -l | foo() { echo "foo"; } # Допустимо, но бесполезно.

if [ "$USER" = bozo ] then bozo_greet () # Объявление функции размещено в условном операторе. { echo "Привет, Bozo!" } fi




- Начало -  - Назад -  - Вперед -