Я изучаю скрипты 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
работают различные команды .
local
?
man bash
. Оказавшись там, введите, /Arrays$
чтобы перейти к разделу о массивах. (Трейлинг $
после Arrays
состоит в том, чтобы предотвратить циклический f
переход по текстовым ссылкам на раздел.) Оттуда вы можете напечатать, чтобы перейти на страницу вперед или b
назад. Введите, q
чтобы выйти из справочной страницы, когда вы закончите.
help
без аргументов будут перечислены все встроенные команды bash, если вам интересно узнать больше.
local
просто объявляет переменную, имеющую область видимости только в определенной в данный момент функции, чтобы основная исполняющая среда не могла «увидеть» значение. Вы не можете использовать local
вне функции. пример
func() {
nonlocal="Non local variable"
local onlyhere="Local variable"
}
func
echo $nonlocal
echo $onlyhere
Вывод: нелокальная переменная
Так что $onlyhere
не было видно за пределами функции.
var=()
, но я полагаю, что это немного, чтобы понять, даже не зная названия того, что вы ищете , ;)