함수에 선언된 Bash 배열은 함수 외부에서는 사용할 수 없습니다.

함수에 선언된 Bash 배열은 함수 외부에서는 사용할 수 없습니다.

Bash(v4.3.11) 터미널에서 다음을 입력합니다.

function FUNCtst() { declare -A astr; astr=([a]="1k" [b]="2k" ); declare -p astr; };FUNCtst;declare -p astr

(아래 내용은 읽기 쉽도록 동일)

function FUNCtst() { 
  declare -A astr; 
  astr=([a]="1k" [b]="2k" ); 
  declare -p astr; 
};
FUNCtst;
declare -p astr

이것을 출력합니다(함수 외부에서 배열의 값이 손실되었습니다. 이유는 무엇입니까?)

declare -A astr='([a]="1k" [b]="2k" )'
bash: declare: astr: not found

나는 이것이 다음과 같이 출력될 것으로 기대합니다.

declare -A astr='([a]="1k" [b]="2k" )'
declare -A astr='([a]="1k" [b]="2k" )'

어떻게 작동하게 만들까요?

답변1

~에서매뉴얼 페이지:

함수 내에서 사용될 때 이 옵션을 사용 local하지 않는 한 , 선언은 각 이름을 command 와 같은 로컬 이름으로 만듭니다.-g

예:

FUNCtst() { 
    declare -gA astr
    astr=([a]="1k" [b]="2k" )
    declare -p astr
}
FUNCtst
declare -p astr

인쇄

declare -A astr=([a]="1k" [b]="2k" )
declare -A astr=([a]="1k" [b]="2k" )

관련 정보