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='()'
FOOBAR
Bash가 다음에 따라 ([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를 참조하더라도 확장됩니다.