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 Linuxagli 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 Bashsenza digitare un percorso esplicito come tale ./commandpossono essere divisi in due categorie: Bash shell builtinse external commands. Bash shell builtinsvieni installato Bashe ne fai parte mentre external commandsnon ne fanno parte Bash. Questo è importante perché Bash shell builtinssono documentati all'interno man bashe la loro documentazione può anche essere invocata con helpcomando mentre di external commandssolito sono documentati da soli manpageso prendono qualche re della -h, --helpbandiera. Per verificare se un comando è un Bash shell builtino 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 vimnon è un shell builtinma un comando esterno situato in /usr/bin/vim. Tuttavia, a volte lo stesso comando può essere installato sia come sia external commandsia shell builtinallo stesso tempo. Aggiungi -aa typeper 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 builtinche an external command. Tuttavia, se hai appena digitato echoe premuto Returnun shell builtinsarebbe chiamato perché appare prima in questo elenco. Nota che echonon è necessario che tutte queste versioni siano uguali. Ad esempio, sul mio sistema /usr/bin/echoprende --helpflag mentre a builtinno.
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 manpagese in forma di documentazione nel *nixmondo. 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 fper andare avanti di una pagina o bper tornare indietro. Digita qper uscire dalla pagina man quando hai finito.
helpsenza args elencherà tutti i builtin bash se sei curioso di vedere di più.
localdichiara 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 localal 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 $onlyherenon 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 . ;)