Я изучаю скрипты bash и нашел это в моем / usr / share / bash-завершении, строка 305:
local cword words=()
Что оно делает? Все учебники онлайн только в формате
local var=value
источник
Я изучаю скрипты bash и нашел это в моем / usr / share / bash-завершении, строка 305:
local cword words=()
Что оно делает? Все учебники онлайн только в формате
local var=value
Хотя мне нравится ответ, данный Джорданмом, я думаю, что не менее важно показать менее опытным Linux
пользователям, как справиться с такими вопросами самостоятельно.
Предлагаемый способ является более быстрым и универсальным, чем поиск ответов на случайных страницах, отображаемых на странице результатов поиска Google.
Во-первых, все команды, которые можно запускать Bash
без указания явного пути к нему, например, ./command
можно разделить на две категории: Bash shell builtins
и external commands
. Bash shell builtins
поставляются Bash
и являются частью этого, а external commands
не являются частью Bash
. Это важно, потому что Bash shell builtins
они документированы внутри, man bash
и их документация также может быть вызвана с помощью help
команды, в то время external commands
как обычно они документируются сами по себе manpages
или имеют некоторый король -h, --help
флага. Чтобы проверить, является ли команда Bash shell builtin
или external command
:
$ type local
local is a shell builtin
Он будет отображаться how command would be interpreted if used as a command name
(с help type
). Здесь мы можем видеть, что local
это shell builtin
. Давайте посмотрим на другой пример:
$ type vim
vim is /usr/bin/vim
Здесь мы видим, что vim
это не shell builtin
внешняя команда, расположенная в /usr/bin/vim
. Однако иногда одна external command
и та же команда может быть установлена одновременно и как, и shell builtin
как одновременно. Добавьте -a
к type
списку все возможности, например:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
Здесь мы можем видеть, что echo
это и a shell builtin
и an external command
. Однако, если вы просто набрали echo
и нажали Returna, shell builtin
будет вызвано, потому что он появляется первым в этом списке. Обратите внимание, что все эти версии echo
не должны быть одинаковыми. Например, в моей системе /usr/bin/echo
принимает --help
флаг, а builtin
нет.
Хорошо, теперь, когда мы знаем, что local
это встроенная оболочка, давайте выясним, как она работает:
$ help local
local: local [option] name[=value] ...
Define local variables.
Create a local variable called NAME, and give it VALUE. OPTION can
be any option accepted by `declare'.
Local variables can only be used within a function; they are visible
only to the function where they are defined and its children.
Exit Status:
Returns success unless an invalid option is supplied, an error occurs,
or the shell is not executing a function.
Обратите внимание на первую строку: name[=value]
. Все между [
и ]
является необязательным . Это общее соглашение, используемое во многих manpages
и формах документации в *nix
мире. При этом команда, о которой вы спрашивали в своем вопросе, совершенно законна. В свою очередь, ...
символ означает, что предыдущий аргумент может быть повторен. Вы также можете прочитать об этом соглашении в некоторых версиях man man
:
The following conventions apply to the SYNOPSIS section and can be used
as a guide in other sections.
bold text type exactly as shown.
italic text replace with appropriate argument.
[-abc] any or all arguments within [ ] are optional.
-a|-b options delimited by | cannot be used together.
argument ... argument is repeatable.
[expression] ... entire expression within [ ] is repeatable.
Итак, в конце дня я надеюсь, что теперь вам будет легче понять, как Linux
работают различные команды .
var=()
, но я полагаю, что это немного, чтобы понять, даже не зная названия того, что вы ищете , ;)local
?man bash
. Оказавшись там, введите,/Arrays$
чтобы перейти к разделу о массивах. (Трейлинг$
послеArrays
состоит в том, чтобы предотвратить циклическийf
переход по текстовым ссылкам на раздел.) Оттуда вы можете напечатать, чтобы перейти на страницу вперед илиb
назад. Введите,q
чтобы выйти из справочной страницы, когда вы закончите.help
без аргументов будут перечислены все встроенные команды bash, если вам интересно узнать больше.local
Ключевое слово может принимать несколько переменных. Предоставление переменной со значением необязательно. Ваш пример объявляет две переменные,cword
иwords
.words
Переменной присваивается пустой массив.источник
local
просто объявляет переменную, имеющую область видимости только в определенной в данный момент функции, чтобы основная исполняющая среда не могла «увидеть» значение. Вы не можете использоватьlocal
вне функции. примерВывод: нелокальная переменная
Так что
$onlyhere
не было видно за пределами функции.источник