Bash에서 읽기 전용, 전역, 연관 배열을 초기화하는 방법은 무엇입니까?

Bash에서 읽기 전용, 전역, 연관 배열을 초기화하는 방법은 무엇입니까?

Bash 버전 "GNU bash, 버전 4.2.39(1)-release (x86_64-redhat-linux-gnu)"에서 다음 코드를 실행합니다.

function foobar {
  declare -rgA FOOBAR=([foo]=bar)
}
foobar
declare -p FOOBAR
# Output: declare -Ar FOOBAR='()'

FOOBARBash가 다음에 따라 ([foo]=bar)초기화 하지 않는 이유는 무엇입니까 declare -p? 동일한 선언은 함수 외부에서도 작동합니다.

declare -rgA FOOBAR=([foo]=bar)
declare -p FOOBAR
# Output: declare -Ar FOOBAR='([foo]="bar" )'

마찬가지로 다음 코드도 FOOBAR작동하지만 읽기 전용은 아닙니다.

function foobar {
  declare -gA FOOBAR
  FOOBAR=([foo]=bar)
}
foobar
declare -p FOOBAR
# Output: declare -A FOOBAR='([foo]="bar" )'

이것은 버그입니까 아니면 기능입니까?

답변1

function foobar {
  declare -rgA 'FOOBAR=([foo]=bar)'
}
foobar
declare -p FOOBAR

(추가 따옴표에 유의하십시오) 나를 위해 일했습니다.

다음에서도 찾을 수 있습니다.

function foobar {
  var="something tricker"
  declare -rgA 'FOOBAR=([foo]=$var)'
}
foobar
declare -p FOOBAR

$var를 참조하더라도 확장됩니다.

관련 정보