local 키워드를 사용하는 bash의 변수 정의


33

bash 스크립팅을 배우는 중 / usr / share / bash-completion, 305 행에서 이것을 발견했습니다.

local cword words=()

무엇을합니까? 온라인의 모든 자습서는 형식으로되어 있습니다

local var=value

답변:


92

jordanm의 답변이 마음 에 들지만 경험이 적은 Linux사용자에게 그러한 질문에 스스로 대처하는 방법을 보여주는 것이 똑같이 중요하다고 생각합니다 .

제안 된 방법은 Google 검색 결과 페이지에 표시되는 임의의 페이지에서 답변을 찾는 것보다 더 빠르고 다양합니다.

먼저, Bash명시적인 경로를 입력하지 않고 실행할 수있는 모든 명령 ( 예 ./command: Bash shell builtins및) 을 두 가지 범주로 나눌 수 있습니다 external commands. Bash shell builtins와 함께 설치되어 있으며 Bash그 일부 external commands는 아니지만 일부입니다 Bash. 이것은 Bash shell builtins내부에 문서화되어 있기 때문에 중요 man bash하며 문서 는 일반적으로 자체적으로 문서화 되거나 깃발의 일부를 차지 help하면서 명령으로 호출 할 수 있습니다 . 명령이 또는 인지 확인하려면 :external commandsmanpages-h, --helpBash shell builtinexternal command

$ type local
local is a shell builtin

how command would be interpreted if used as a command name(부터 help type) 가 표시됩니다 . 여기에서 우리는 볼 수 local입니다 shell builtin. 다른 예를 보자.

$ type vim
vim is /usr/bin/vim

여기에 있는 외부 명령 vim이 아니라는 것을 알 수 있습니다 . 그러나 때로는 같은 명령을 동시에 및 동시에 설치할 수 있습니다 . 추가 하는 예를 들어, 모든 가능성을 나열합니다 :shell builtin/usr/bin/vimexternal commandshell builtin-atype

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo

여기서 우리는 echoa shell builtin와 a 둘 다임을 알 수 있습니다 external command. 그러나 방금 입력 echo하고 누른 경우 Returna shell builtin가이 목록의 첫 번째 항목이기 때문에 호출됩니다. 이 모든 버전이 echo동일 할 필요는 없습니다. 예를 들어 내 시스템 /usr/bin/echo에서 --help플래그를 사용하지만 플래그를 사용 builtin하지 않습니다.

자, 이제 우리는 그것이 local쉘 내장 이라는 것을 알았을 때 그것이 어떻게 작동하는지 알아 봅시다.

$ 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.

첫 번째 줄에 유의하십시오 name[=value]. [와 사이의 모든 것] 있다 선택 . 세계의 많은 manpages문서 형식 에서 사용되는 일반적인 규칙 *nix입니다. 즉, 질문에서 당신이 묻는 명령은 완벽하게 합법적입니다. 차례로 ...문자는 이전 인수를 반복 할 수 있음을 의미합니다. 일부 버전의 경우이 규칙에 대해 읽을 수도 있습니다 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.

따라서 하루가 끝날 무렵에는 다양한 명령이 어떻게 Linux작동 하는지 쉽게 이해할 수 있기를 바랍니다 .


5
아주 좋은 답변입니다. 코드를 통해 초보자가 배열 할당이 무엇인지 스스로 var=()알 수 있기를 바랍니다.하지만 찾고있는 이름을 알지 못하고 알아내는 것이 조금 있다고 생각합니다. . ;)
와일드 카드

비 bash 쉘도 지원 local합니까?
palswim

2
난 당신의 답변을
찬송

@Wildcard 배열은 명령이 아닌 bash 구문이므로에 정의되어 man bash있습니다. 일단 거기에 입력 /Arrays$하면 배열의 섹션으로 이동합니다. (후행는 $이후 Arrays섹션에있는 텍스트 참조를 순환 방지하는 것입니다.) 당신이 거기에 입력 할 수 있습니다에서 f앞으로 페이지를 이동하거나 b뒤로 이동. q완료되면 매뉴얼 페이지를 종료하려면 입력 하십시오.
테일러 에드 미 스톤

또한 helpargs없이 실행 하면 더 많은 것을 알고 싶다면 모든 bash 내장을 나열합니다.
Taylor Edmiston

29

local키워드는 여러 변수를 취할 수 있습니다. 변수를 값으로 제공하는 것은 선택 사항입니다. 귀하의 예제에서는 두 개의 변수를 선언 cword하고 words. words변수 빈 어레이에 할당된다.


18

local주 실행 환경이 값을 "볼"수 없도록 현재 정의 된 함수에서만 범위를 가지도록 변수를 선언합니다. local함수 외부에서는 사용할 수 없습니다 . 예

func() {
   nonlocal="Non local variable"
   local onlyhere="Local variable"
}
func
echo $nonlocal 
echo $onlyhere

출력 : 비 로컬 변수

따라서 $onlyhere함수 범위 밖에서는 보이지 않았습니다.


이 답변은 빠른 이해가 필요한 사람에게 더 적합합니다.
Alex Raj Kaliamoorthy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.