Estou aprendendo o script bash e encontrei isso no meu / usr / share / bash-complete, linha 305:
local cword words=()
O que isso faz? Todos os tutoriais online estão apenas no formato
local var=value
fonte
Estou aprendendo o script bash e encontrei isso no meu / usr / share / bash-complete, linha 305:
local cword words=()
O que isso faz? Todos os tutoriais online estão apenas no formato
local var=value
Embora eu goste da resposta dada pelo jordanm , acho que é igualmente importante mostrar aos Linux
usuários menos experientes como lidar com essas questões sozinhos.
A maneira sugerida é mais rápida e versátil do que procurar respostas em páginas aleatórias que aparecem na página de resultados de pesquisa do Google.
Primeiro, todos os comandos que podem ser executados Bash
sem digitar um caminho explícito, como ./command
podem ser divididos em duas categorias: Bash shell builtins
e external commands
. Bash shell builtins
vem instalado Bash
e faz parte dele enquanto external commands
não faz parte Bash
. Isso é importante porque Bash shell builtins
estão documentados internamente man bash
e sua documentação também pode ser chamada com help
comando, enquanto external commands
geralmente são documentados por si próprios manpages
ou levam algum sinal de -h, --help
alerta. Para verificar se um comando é um Bash shell builtin
ou um external command
:
$ type local
local is a shell builtin
Será exibido 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
comando externo localizado em /usr/bin/vim
. No entanto, às vezes o mesmo comando pode ser instalado como um external command
e shell builtin
ao mesmo tempo. Adicione -a
à type
lista 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ê apenas digitasse echo
e pressionasse Returna, shell builtin
seria chamado porque aparece primeiro nesta lista. Observe que todas essas versões echo
do não precisam ser as mesmas. Por exemplo, no meu sistema, o sinalizador /usr/bin/echo
é --help
flagrado enquanto builtin
o não.
Ok, agora quando sabemos que local
é um shell incorporado, vamos descobrir como ele 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 muitas manpages
formas de documentação no *nix
mundo. Dito isto, o comando que você perguntou na sua pergunta é perfeitamente legal. Por sua vez, ...
caractere significa que o argumento anterior pode ser repetido. Você também pode ler sobre esta 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.
Portanto, no final do dia, espero que agora você tenha mais facilidade para entender como os diferentes comandos Linux
funcionam.
var=()
, mas suponho que isso seja um pouco demais para descobrir sem ao menos saber o nome do que você está procurando . ;)local
?man bash
. Uma vez lá, digite/Arrays$
para pular para a seção em matrizes. (A$
seguirArrays
é para evitar alternar entre as referências no texto da seção.) A partir daí, você pode digitarf
para avançar uma página oub
retroceder. Digiteq
para sair da página de manual quando terminar.help
sem args listará todos os bash internos se você estiver curioso para ver mais.A
local
palavra-chave pode receber várias variáveis. Fornecer um valor à variável é opcional. Seu exemplo declara duas variáveiscword
ewords
. Awords
variável recebe uma matriz vazia.fonte
local
simplesmente declara que uma variável tem escopo apenas na função atualmente definida, para que o ambiente principal de execução não possa "ver" o valor. Você não pode usarlocal
fora de uma função. ExemploSaída: variável não local
Portanto,
$onlyhere
não estava visível fora do escopo da função.fonte