평가를 사용하지 마십시오.
이것은 작동하지 않습니다:
astr=(a b c)
str="#astr[@]"
echo "${!str}"
답변1
팁에서여기, 나는 이것을 할 수 있었습니다:
astr=(a b c)
declare -n astrRef="astr"
echo ${#astrRef[@]}
또한 이러한 배열을 생성하거나 단순히 간접 할당을 통해 생성할 수도 있습니다.
declare -n astrRef="astr"
astrRef=(d e f)
declare -p astrRef astr
astrRef+=(g)
declare -p astrRef astr
답변2
이것은 어떻습니까? 적어도 효과가 있습니다.배쉬 3.x위에:
astr=(a b c)
str=astr[@] # Our reference to an array
local arr=("${!str}") # Copy into an array using indirect ref
echo ${#arr[*]}
# 3
bstr=("a foo" "a bar" "a fox" "a buzz")
str=bstr[@]
local arr=("${!str}")
echo ${#arr[*]}
# 4
함수에 로컬로 local
작업 변수를 유지하기 위해 키워드를 사용 하지만 이는 선택 사항입니다. arr
실제로 bash 제한으로 인해 arr
배열의 요소에 (간접적으로) 액세스하는 데 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
echo ${arr[1]} # Print 2nd element
echo ${#arr[1]} # ... print its size
(테스트됨배쉬 3.1.23, 배쉬 4.3.48 및 4.4.12)