Дополнительно
Передача параметров в функцию Bash
Я пытаюсь найти, как передать параметры в функции Bash, но всегда получается, как передать параметр из командной строки.
Я хотел бы передать параметры в моем сценарии. Я пытался:
myBackupFunction("..", "...", "xx")
function myBackupFunction($directory, $options, $rootPassword) {
...
}
Но синтаксис не правильный, как передать параметр моей функции?
893
7
Есть два типичных способа объявления функции. Я предпочитаю второй подход.
или
Вызов функции с аргументами:
Функция относится к переданным аргументам по их позиции (не по имени), то есть $ 1, $ 2 и т. Д. $ 0 - это имя самого сценария.
Пример:
Кроме того, вам нужно вызвать вашу функцию после , когда она объявлена.
Выход:
& Лт;!- язык: lang-none - >
Ссылка: Расширенное руководство по написанию баш-скриптов.
Знание языков программирования высокого уровня (C / C ++ / Java / PHP / Python / Perl ...) предложил бы непрофессионалу, чтобы функции bash работали так же, как и на других языках. Вместо этого функции bash работают как команды оболочки и ожидают, что аргументы будут переданы им таким же образом, как можно передать опцию команде оболочки (ls -l). По сути, аргументы функции в bash рассматриваются как параметры позиции (
$ 1, $ 2..$ 9, $ {{{10}}}, $ {{{11}}}
и т. Д.). Это неудивительно, учитывая, как работаетgetopts
. Скобки не требуются для вызова функции в bash.( Примечание : Я работаю над Open Solaris в данный момент.)
Если вы предпочитаете именованные параметры, можно (с несколькими хитростями) фактически передать именованные параметры функциям (также позволяет передавать массивы и ссылки).
Разработанный мною метод позволяет вам определить именованные параметры, передаваемые функции, подобной этой:
Вы также можете аннотировать аргументы как @required или @readonly, create ...rest аргументы, создавать массивы из последовательных аргументов (используя, например,.
строка [4]
) и при необходимости перечислить аргументы в несколько строк:Другими словами, вы можете не только вызывать свои параметры по их именам (что компенсирует более читаемое ядро), вы можете фактически передавать массивы (и ссылки на переменные - хотя эта функция работает только в bash 4.3)! Кроме того, все отображаемые переменные находятся в локальном объеме, так же, как $ 1 (и другие).
Код, который делает эту работу довольно легкой и работает как в bash 3, так и в bash 4 (это единственные версии, с которыми я ее тестировал). Если вы заинтересованы в большем количестве подобных трюков, которые делают разработку с помощью bash намного приятнее и проще, вы можете взглянуть на мою Bash Infinity Framework, приведенный ниже код доступен в качестве одной из его функций.
Пропустите parens и запятые:
и функция должна выглядеть так:
Я надеюсь, что этот пример может помочь вам. Он берет два числа от пользователя, передает их функции
add
(в самой последней строке кода), иadd
суммирует их и распечатывает.Думал, что я буду говорить с упоминанием другого способа передать именованные параметры для bash... передача по ссылке. Это поддерживается на bash 4.0
Альтернативный синтаксис для bash 4.3 использует nameref
Хотя nameref намного удобнее, так как он легко отклоняется, некоторые старые поддерживаемые дистрибутивы все еще отправляют более старую версию, поэтому я пока не буду рекомендовать ее.
Простой пример, который очистит как во время выполнения скрипта, так и внутри скрипта при вызове функции.