Android

Функции Баш

tr - Transform, Replace and Remove specific characters from strings | #10 Practical Bash

tr - Transform, Replace and Remove specific characters from strings | #10 Practical Bash

Оглавление:

Anonim

Функция Bash - это, по сути, набор команд, которые можно вызывать множество раз. Цель функции - помочь вам сделать ваши bash-скрипты более читабельными и избежать повторного написания одного и того же кода.

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

Декларация функции Bash

Синтаксис объявления функции bash очень прост. Они могут быть объявлены в двух разных форматах:

  1. Первый формат начинается с имени функции, за которым следуют скобки. Это предпочтительный и более используемый формат.

    function_name () { commands }

    Однострочная версия:

    function_name () { commands; }

    Второй формат начинается с зарезервированного слова function за которым следует имя функции.

    function function_name { commands }

    Однострочная версия:

    function function_name { commands; }

Несколько моментов, которые следует отметить:

  • Список команд между фигурными скобками {} является телом функции. Фигурные скобки, которые окружают тело функции, должны быть отделены от тела пробелами или символами новой строки. Определение функции не выполняет ее. Чтобы вызвать функцию bash, просто используйте имя функции. Команды между фигурными скобками выполняются всякий раз, когда функция вызывается в сценарии оболочки. Определение функции должно быть помещено перед любыми вызовами функции. При использовании «сжатых» функций из одной строки точка с запятой ; Вы должны следовать последней команде в функции. Вы всегда должны стараться, чтобы имена ваших функций были описательными.

Чтобы лучше это понять, взглянем на следующий пример:

~ / Hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Давайте проанализируем код построчно:

  • В строке 3 мы определяем функцию, присваивая ей имя и открывая фигурную скобку { которая обозначает начало тела функции. Строка 4 - это тело функции. Тело функции может содержать несколько команд и объявлений переменных. Строка 5 , закрывающая фигурная скобка } , определяет конец функции hello_world строке 7 мы выполняем функцию. Вы можете выполнять функцию столько раз, сколько вам нужно.

Если вы запустите скрипт, он напечатает hello, world .

Область переменных

Глобальные переменные - это переменные, к которым можно получить доступ из любого места в скрипте независимо от области видимости. В Bash все переменные по умолчанию определены как глобальные, даже если они объявлены внутри функции.

Локальные переменные могут быть объявлены в теле функции с ключевым словом local и могут использоваться только внутри этой функции. Вы можете иметь локальные переменные с одинаковыми именами в разных функциях.

Чтобы лучше проиллюстрировать, как работает область видимости переменных в Bash, давайте рассмотрим пример:

~ / Variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Сценарий начинается с определения двух глобальных переменных var1 и var2 . Затем функция, которая устанавливает локальную переменную var1 и изменяет глобальную переменную var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Из приведенного выше вывода можно сделать вывод, что:

  • Если вы установите локальную переменную внутри тела функции с тем же именем, что и у существующей глобальной переменной, она будет иметь приоритет над глобальной переменной. Глобальные переменные могут быть изменены внутри функции.

Возвращаемые значения

В отличие от функций в «реальных» языках программирования, функции Bash не позволяют вам возвращать значение при вызове. Когда функция bash завершает свою работу, ее возвращаемое значение является состоянием последнего оператора, выполненного в функции, 0 для успеха и ненулевое десятичное число в диапазоне 1 - 255 для ошибки.

Статус возврата можно указать с помощью ключевого слова return , и оно присваивается переменной $? , Оператор return завершает функцию. Вы можете думать об этом как о состоянии выхода из функции.

~ / Return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Чтобы на самом деле вернуть произвольное значение из функции, нам нужно использовать другие методы. Самый простой вариант - присвоить результат функции глобальной переменной:

~ / Return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Другой, лучший вариант для возврата значения из функции - это отправить значение в стандартный stdout используя echo или printf как показано ниже:

~ / Return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

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

Передача аргументов в функции Bash

Чтобы передать любое количество аргументов функции bash, просто поместите их сразу после имени функции, разделив их пробелом. Хорошей практикой является двойная кавычка аргументов, чтобы избежать неправильного разбора аргумента с пробелами в нем.

  • Передаваемые параметры: $1 , $2 , $3 $n , соответствуют позиции параметра после имени функции. Переменная $0 зарезервирована для имени функции. Переменная $# содержит количество позиционных параметров / аргументов, переданных в Переменные $* и $@ содержат все позиционные параметры / аргументы, переданные функции.
    • При двойных кавычках "$*" раскрывается в одну строку, разделенную пробелом (первый символ IFS) - "$1 $2 $n" При двойных кавычках "$@" раскрывается в отдельные строки - "$1" "$2" "$n" . Если двойные кавычки не указаны, $* и $@ одинаковы.

Вот пример:

~ / Passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Вывод

Функция Bash - это блок многократно используемого кода, предназначенный для выполнения определенной операции. После определения функция может быть вызвана несколько раз в скрипте.

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

терминал bash