A palavra-chave local
pode ter várias variáveis. Fornecer a variável com um valor é opcional. Seu exemplo declara duas variáveis, cword
e words
. A variável words
é atribuída a uma matriz vazia.
Estou aprendendo o bash scripting e descobri isso no meu / usr / share / bash-completion, linha 305:
local cword words=()
O que isso faz? Todos os tutoriais on-line estão no formato
local var=value
Embora eu goste de resposta dada por jordanm , acho que é igualmente importante mostrar menos experientes Linux
usuários como para lidar com essas questões por si mesmos.
A maneira sugerida é mais rápida e versátil do que procurar respostas em páginas aleatórias exibidas na página de resultados de pesquisa do Google.
Primeiro, todos os comandos que podem ser executados em Bash
sem digitar um caminho explícito para ele, como ./command
, podem ser divididos em duas categorias: Bash shell builtins
e external commands
. Bash shell builtins
vem instalado com Bash
e faz parte dele, enquanto external commands
não faz parte de Bash
. Isso é importante porque Bash shell builtins
estão documentados em man bash
e sua documentação também pode ser chamada com o comando help
, enquanto external commands
são geralmente documentados em seus próprios manpages
ou recebem um pouco de -h, --help
flag. Para verificar se um comando é um Bash shell builtin
ou um external command
:
$ type local
local is a shell builtin
Ele mostrará how command would be interpreted if used as a command name
(de help type
). Aqui podemos ver que local
é um shell builtin
. Vamos ver outro exemplo:
$ type vim
vim is /usr/bin/vim
Aqui, podemos ver que vim
não é um shell builtin
, mas um comando externo localizado em /usr/bin/vim
. No entanto, às vezes, o mesmo comando pode ser instalado como external command
e ser shell builtin
ao mesmo tempo. Adicione -a
a type
para listar todas as possibilidades, por exemplo:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
Aqui, podemos ver que echo
é um shell builtin
e um external command
. No entanto, se você acabou de digitar echo
e pressionar Return , um shell builtin
seria chamado porque aparece primeiro nesta lista. Observe que todas essas versões de echo
não precisam ser iguais. Por exemplo, no meu sistema /usr/bin/echo
leva --help
bandeira enquanto builtin
não.
Ok, agora, quando sabemos que local
é um shell embutido, vamos descobrir como funciona:
$ 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.
Observe a primeira linha: name[=value]
. Tudo entre [
e ]
é opcional . É uma convenção comum usada em muitos manpages
e forma de documentação em *nix
world. Dito isto, o comando que você perguntou sobre a sua pergunta é perfeitamente legal. Por sua vez, ...
character significa que o argumento anterior pode ser repetido. Você também pode ler sobre essa convenção em algumas versões de 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.
Então, no final do dia, espero que agora você tenha mais facilidade para entender como os diferentes comandos em Linux
funcionam.
local
simplesmente declara uma variável para ter escopo somente na função atualmente definida, para que o ambiente de execução principal não possa "ver" o valor. Você não pode usar local
fora de uma função. Exemplo
func() {
nonlocal="Non local variable"
local onlyhere="Local variable"
}
func
echo $nonlocal
echo $onlyhere
Saída: Variável não local
Portanto, $onlyhere
não era visível fora do escopo da função.
Tags shell-script