다음과 같은이 답변, 이 방법을 내 스크립트에 적용하고 싶습니다. 기본 원칙은 다음과 같습니다.
foo="bar"
baz="foo"
echo "${!baz}"
bar
다음과 같이 번역된 문자열을 제공하고 싶습니다.
declare -A es
declare -A en
#
es["greet"]="Hola"
en["greet"]="Hello"
#
es["world"]="Mundo"
en["world"]="World"
그런 다음 스크립트 상단에서 다음을 설정했습니다.
lang="es"
그 다음에
echo "${!lang["greet"]} ${!lang["world"]}"
나는 출력을 기대합니다 :
Hola Mundo
또는
lang="en"
echo "${!lang["greet"]}" "${!lang["world"]}"
Hello World
하지만 내가 얻는 것은 빈 문자열뿐입니다.
이것이 가능합니까, 아니면 다른 방법을 모색해야 합니까?
나는 지금까지 두 가지 접근 방식을 취했지만 둘 중 어느 것도 마음에 들지 않습니다.
declare -A hello
hello["es"]="Hola"
hello["en"]="Hello"
declare -A world
world["es"]="Mundo"
world["en"]="World"
lang="es"
echo "${hello[$lang]} ${world[$lang]}"
Hola Mundo
또 다른:
lang="es"
if [[ "$lang" = "es" ]]; then
declare -A language=(
["greet"]="Hola"
["world"]="Mundo"
)
elif [[ "$lang" = "en" ]]; then
declare -A language=(
["greet"]="Hello"
["world"]="World"
)
fi
echo "${language["greet"]} ${language["world"]}"
Hola Mundo
답변1
변수를 참조하려면 간접 변수보다는 이름을 사용하십시오.
en
연관 배열을 통한 초기 설정 및 es
:
$ declare -n lang=en
$ echo "${lang["greet"]} ${lang["world"]}"
Hello World
$ declare -n lang=es
$ echo "${lang["greet"]} ${lang["world"]}"
Hola Mundo
이름으로 참조되는 값은 lang
다른 변수의 이름입니다. 이 변수에 액세스하는 것은 lang
명명된 변수에 액세스하는 것과 같습니다.
bash
버전 4.3부터 이름 참조 변수를 셸에서 사용할 수 있습니다.