Uczę się skryptów bash i znalazłem to na moim / usr / share / bash-complete, wiersz 305:
local cword words=()
Co to robi? Wszystkie samouczki online są tylko w formacie
local var=value
Uczę się skryptów bash i znalazłem to na moim / usr / share / bash-complete, wiersz 305:
local cword words=()
Co to robi? Wszystkie samouczki online są tylko w formacie
local var=value
Odpowiedzi:
Chociaż podoba mi się odpowiedź udzielona przez jordanm , myślę, że równie ważne jest pokazanie mniej doświadczonym Linux
użytkownikom, jak samodzielnie radzić sobie z takimi pytaniami.
Sugerowany sposób jest szybszy i bardziej wszechstronny niż szukanie odpowiedzi na losowych stronach wyświetlanych na stronie wyników wyszukiwania Google.
Po pierwsze, wszystkie polecenia, które można uruchomić Bash
bez wpisywania wyraźnej ścieżki do niego, takie jak, ./command
można podzielić na dwie kategorie: Bash shell builtins
i external commands
. Bash shell builtins
pochodzą z Bash
i są jego częścią, a external commands
nie są częścią Bash
. Jest to ważne, ponieważ Bash shell builtins
są dokumentowane wewnątrz, man bash
a ich dokumentację można również wywoływać za pomocą help
polecenia, podczas gdy external commands
zwykle są one dokumentowane samodzielnie manpages
lub zabierają króla -h, --help
flagi. Aby sprawdzić, czy polecenie jest Bash shell builtin
albo external command
:
$ type local
local is a shell builtin
Wyświetli się how command would be interpreted if used as a command name
(z help type
). Tutaj widzimy, że local
jest to shell builtin
. Zobaczmy inny przykład:
$ type vim
vim is /usr/bin/vim
Tutaj widzimy, że vim
nie jest shell builtin
to zewnętrzne polecenie znajdujące się w /usr/bin/vim
. Czasami jednak to samo polecenie może być zainstalowane zarówno jako, jak external command
i shell builtin
jednocześnie. Dodaj -a
do type
listy wszystkich możliwości, na przykład:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
Tutaj widzimy, że echo
jest to zarówno a, jak shell builtin
i an external command
. Jednakże, jeśli właśnie wpisałeś echo
i nacisnąłeś Returna shell builtin
, zostanie wywołany, ponieważ pojawia się jako pierwszy na tej liście. Pamiętaj, że wszystkie te wersje echo
nie muszą być takie same. Na przykład w moim systemie /usr/bin/echo
trwa --help
flaga, a builtin
nie.
Ok, teraz kiedy wiemy, że local
jest to wbudowana powłoka, dowiedzmy się, jak to działa:
$ 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.
Należy zwrócić uwagę na pierwszą linię: name[=value]
. Wszystko pomiędzy [
i ]
jest opcjonalne . Jest to powszechna konwencja stosowana w wielu manpages
dokumentach na *nix
całym świecie. Biorąc to pod uwagę, polecenie, o które pytałeś w swoim pytaniu, jest całkowicie legalne. Z kolei ...
znak oznacza, że można powtórzyć poprzedni argument. Możesz także przeczytać o tej konwencji w niektórych wersjach 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.
Tak więc na koniec dnia mam nadzieję, że teraz łatwiej będzie ci zrozumieć, jak działają różne polecenia Linux
.
local
?
man bash
. Na miejscu wpisz, /Arrays$
aby przejść do sekcji tablic. (Następujące $
po Arrays
to, aby zapobiec przewijaniu w tekście odwołań do sekcji.) Stamtąd możesz wpisać, f
aby przejść do przodu lub b
do tyłu. Wpisz, q
aby wyjść ze strony podręcznika po zakończeniu.
help
bez args będzie lista wszystkich poleceń wbudowanych bash, jeśli jesteś ciekaw, aby zobaczyć więcej.
local
po prostu deklaruje, że zmienna ma zasięg tylko w aktualnie zdefiniowanej funkcji, tak że główne środowisko wykonawcze nie może „zobaczyć” wartości. Nie można używać local
poza funkcją. Przykład
func() {
nonlocal="Non local variable"
local onlyhere="Local variable"
}
func
echo $nonlocal
echo $onlyhere
Dane wyjściowe: zmienna nielokalna
Więc $onlyhere
nie było widoczne poza zakresem funkcji.
var=()
, ale przypuszczam, że jest to trochę dużo do zrobienia, nawet nie znając nazwy tego, czego szukasz . ;)