Sto imparando lo scripting bash e l'ho trovato sul mio / usr / share / bash-completamento, linea 305:
local cword words=()
Che cosa fa? Tutti i tutorial online sono solo nel formato
local var=value
Sto imparando lo scripting bash e l'ho trovato sul mio / usr / share / bash-completamento, linea 305:
local cword words=()
Che cosa fa? Tutti i tutorial online sono solo nel formato
local var=value
Risposte:
Sebbene mi piaccia la risposta data da Jordan, penso che sia altrettanto importante mostrare Linux
agli utenti meno esperti come affrontare tali domande da soli.
Il modo suggerito è più veloce e versatile rispetto alla ricerca di risposte a pagine casuali visualizzate nella pagina dei risultati di ricerca di Google.
Innanzitutto, tutti i comandi che possono essere eseguiti Bash
senza digitare un percorso esplicito come tale ./command
possono essere divisi in due categorie: Bash shell builtins
e external commands
. Bash shell builtins
vieni installato Bash
e ne fai parte mentre external commands
non ne fanno parte Bash
. Questo è importante perché Bash shell builtins
sono documentati all'interno man bash
e la loro documentazione può anche essere invocata con help
comando mentre di external commands
solito sono documentati da soli manpages
o prendono qualche re della -h, --help
bandiera. Per verificare se un comando è un Bash shell builtin
o un external command
:
$ type local
local is a shell builtin
Verrà visualizzato how command would be interpreted if used as a command name
(da help type
). Qui possiamo vedere che local
è un shell builtin
. Vediamo un altro esempio:
$ type vim
vim is /usr/bin/vim
Qui possiamo vedere che vim
non è un shell builtin
ma un comando esterno situato in /usr/bin/vim
. Tuttavia, a volte lo stesso comando può essere installato sia come sia external command
sia shell builtin
allo stesso tempo. Aggiungi -a
a type
per elencare tutte le possibilità, ad esempio:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
Qui possiamo vedere che echo
è sia a shell builtin
che an external command
. Tuttavia, se hai appena digitato echo
e premuto Returnun shell builtin
sarebbe chiamato perché appare prima in questo elenco. Nota che echo
non è necessario che tutte queste versioni siano uguali. Ad esempio, sul mio sistema /usr/bin/echo
prende --help
flag mentre a builtin
no.
Ok, ora quando sappiamo che local
è una shell integrata scopriamo come funziona:
$ 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.
Si noti la prima riga: name[=value]
. Tutto tra [
e ]
è facoltativo . È una convenzione comune utilizzata in molti manpages
e in forma di documentazione nel *nix
mondo. Detto questo, il comando che hai chiesto nella tua domanda è perfettamente legale. A sua volta, ...
carattere significa che l'argomento precedente può essere ripetuto. Puoi anche leggere questa convenzione in alcune versioni di 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.
Quindi, alla fine, spero che ora avrai un tempo più facile per capire come funzionano i diversi comandi Linux
.
local
?
man bash
. Una volta lì, digita /Arrays$
per passare alla sezione sugli array. (Il $
seguito Arrays
è per evitare di scorrere i riferimenti nel testo alla sezione.) Da lì puoi digitare f
per andare avanti di una pagina o b
per tornare indietro. Digita q
per uscire dalla pagina man quando hai finito.
help
senza args elencherà tutti i builtin bash se sei curioso di vedere di più.
local
dichiara semplicemente che una variabile ha ambito solo nella funzione attualmente definita, in modo che l'ambiente di esecuzione principale non possa "vedere" il valore. Non è possibile utilizzare local
al di fuori di una funzione. Esempio
func() {
nonlocal="Non local variable"
local onlyhere="Local variable"
}
func
echo $nonlocal
echo $onlyhere
Output: variabile non locale
Quindi $onlyhere
non era visibile al di fuori dell'ambito della funzione.
var=()
, ma suppongo che sia un po 'troppo da capire senza nemmeno sapere il nome di ciò che stai cercando . ;)