아래와 같이 array_call_self.sh라는 스크립트를 작성하면
#!/bin/bash
declare -A num word
word=(
[a]='index_a'
[b]='index_b'
[c]='index_c'
)
num=(
[a]=1
[b]=2
[c]=3
)
array=${$1[@]}
for i in ${$array[@]};do
echo $i
done
내가 실행하면 bash array_call_self.sh word
그것은 나를 반환합니다
test.sh: line 13: ${$1[@]}: bad substitution
test.sh: line 14: ${$array[@]}: bad substitution
답변1
이름으로 변수를 참조하고 싶을 수도 있습니다( bash
버전 4.3 이상에서 사용 가능).
#!/bin/bash
declare -A num word
word=(
[a]='index_a'
[b]='index_b'
[c]='index_c'
)
num=(
[a]=1
[b]=2
[c]=3
)
declare -n var="$1"
printf '%s\n' "${var[@]}"
이는 변수를 var
이름 참조 변수로 선언하고 스크립트의 첫 번째 인수로 명명된 변수를 참조합니다. 첫 번째 인수가 변수의 유효한 이름이 아니거나 name 인 경우 var
오류가 발생합니다.
변수 이름을 선언 하고 할당한 후에는 일반적으로 지정된 변수의 값에 액세스하는 것과 마찬가지로 var
값에 액세스합니다 .var
제공되니 참고해주세요변수 이름스크립트의 명령줄에서는 사용할 수 없기 때문에 적절한 명령줄 구문 분석을 수행하여 이러한 구현 세부 정보를 숨기고 유효한 인수를 제한된 목록으로 제한할 수 있습니다. 위의 코드를 사용하면 스크립트 사용자가 출력할 수 있습니다.스크립트의 모든 변수.
값을 유한 목록으로 제한하는 간단한 방법:
case $1 in
(word|num) ;; # ok
(*)
echo 'error' >&2
exit 1
esac
declare -n var="$1"