Каковы скобки, используемые в определении функции bash shell script типа "f() {}"? Разве это отличается от использования ключевого слова "функция"?
Я всегда задавался вопросом, для чего они используются?
Кажется глупым вкладывать их в каждый раз, если вы никогда не можете положить что-нибудь внутри них.
function_name () {
#statements
}
Также есть что-нибудь, что можно получить/проиграть, поставив ключевое слово function
в начале функции?
function function_name () {
#statements
}
Ответы
Ответ 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