Я изучаю скрипты 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=(), но я полагаю, что это немного, чтобы понять, даже не зная названия того, что вы ищете , ;)