Если Вы смотрите на файлы /usr/share/bash-completion/completions/*
у многих есть функциональное определение, сопровождаемое && complete -F
(по крайней мере, в Гостеприимном). Почему это?
Нотация имеет некоторое особое значение в файле завершения удара?
В ударе я не вижу функционального различия между сценариями
a(){ echo in;return 1;} && a
и
a(){ echo in;return 1;}; a
Справочник Bash говорит
, статус выхода функционального определения является нулем, если синтаксическая ошибка не происходит, или функция только для чтения с тем же именем уже существует. При выполнении статус выхода функции является статусом выхода последней команды, выполняемой в теле.
Синтаксическая ошибка может завершить выполнение сценария перед эти complete -F
команда, таким образом, команда после объявления функции не может быть выполнена так или иначе, но если функция только для чтения с тем же именем объявляется прежде, чем получить файл, содержащий функцию, это не может завершить выполнение. Препятствовать тому, чтобы неправильная функция завершения удара была названа, такое логическое И тест, используется.
complete
удар встроены, который говорит удар , как автоматически заполнить в различных ситуациях. В частности, complete -F
funcname cmdname говорит удар , что, если пользователь ввел команду cmdname затем, завершение аргументов должно быть обработано функцией funcname. Используйте help complete
и man bash
для получения дополнительной информации. Много установленных на системе файлов автозавершения устанавливают функции автозавершения с помощью шаблона
_cmd_name () {
... compute completions here and assign them to COMPREPLY ...
return 0
} && complete -F _cmd_name cmd_name
, Например,
_apt_get () {
... compute completions here and assign them to COMPREPLY ...
return 0
} && complete -F _apt_get apt-get
, который говорит удар , что, если у пользователя есть тип apt-get
как название команды затем, автозавершение будет обработано функцией _apt_get
.
Это - просто вопрос стиля кодирования, и этот стиль не ужасен или тверд понять.