19.7.8. Функции

19.7.8. Функции

Описание функции выглядит так:

имя() { список; }

Пример:

cdir()

{

 # изменяем каталог

 cd /

}

При выполнении функция не создает нового процесса, а выполняется в среде процесса, содержащего эту функцию. Аргументы функции можно передать ей как обыкновенные параметры при вызове сценария. Функции можно описывать в любом месте сценария, но вызов функции должен осуществляться только после ее описания. Возвращаясь к примеру, модифицируйте функцию:

#!/bin/bash

# файл fn

echo $$

cdir()

{

 # изменяем каталог

 echo "Х=$Х"

 Х=2

 echo "Params $0 $# $1 $2"

 echo "PID = $$"

 return 0

 cd $1

}

X=1

echo "X=$X"

cdir /etc

# вызов функции "cd" с параметрами

echo $?

echo "X=$X"

На экране вы увидите примерно следующую информацию:

788

Х=1

Х=1

Params fn l /etc

788

0

Х=2

Проанализируем полученную информацию. Как уже отмечалось, функция не порождает нового процесса, поэтому PID остался равным 788 как до вызова функции, так и во время ее выполнения. Переменная X доступна нашей функции, потому что описана до вызова функции. Функция «видит» значение переменной X, установленное в основном блоке сценария. Затем функция изменяет значение переменной X и передает его в основной блок (Х=2). Функции был передан только один параметр — /etc, вместо второго параметра была отображена пустая строка. Имя файла осталось прежним — fn. Обратите внимание на важный момент: функция сообщила нам много полезной информации об устройстве функций в bash, но не оправдала своего названия — cdir (change dir). Реально изменения каталога не произошло, потому что перед выполнением команды cd была выполнена команда return с кодом завершения 0, которая прервала выполнение функции.

Данный текст является ознакомительным фрагментом.