Подтвердить что ты не робот

Каковы скобки, используемые в определении функции bash shell script типа "f() {}"? Разве это отличается от использования ключевого слова "функция"?

Я всегда задавался вопросом, для чего они используются? Кажется глупым вкладывать их в каждый раз, если вы никогда не можете положить что-нибудь внутри них.

function_name () {
    #statements
}

Также есть что-нибудь, что можно получить/проиграть, поставив ключевое слово function в начале функции?

function function_name () {
    #statements
}
4b9b3361

Ответ 1

Ключевое слово function устарело в пользу function_name() для переносимости с Спецификация POSIX

Функция - это определяемое пользователем имя, которое используется как простая команда для вызова составная команда с новым позиционным параметры. Функция определяется с помощью "команда определения функции".

Формат определения функции команда выглядит следующим образом:

fname() compound-command[io-redirect ...]

Обратите внимание, что { } не являются обязательными, поэтому, если вы не собираетесь использовать ключевое слово function (и вам не следует), тогда необходимо (), чтобы анализатор знал, что вы определяете функцию.

Пример: это определение и вызов юридической функции:

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar
foo
bar

Ответ 2

Пустые круглые скобки требуются в первом примере, так что bash знает это определение функции (в противном случае это выглядит как обычная команда). Во втором примере () является необязательным, поскольку вы использовали function.

Ответ 3

Без function расширение псевдонима происходит во время определения. Например:.

alias a=b
# Gets expanded to "b() { echo c; }" :
a() { echo c; }
b
# => c
# Gets expanded to b:
a
# => c

Однако при function расширение псевдонима не происходит во время определения, поэтому псевдоним "скрывает" определение:

alias a=b
function a { echo c; }
b
# => command not found
# Gets expanded to b:
a
# => command not found
unalias a
a
# => c