쉘 스크립트에 동일한 패턴을 가진 전역 변수가 여러 개 있습니다. 예를 들면 다음과 같습니다.
VALID_DOMESTIC_ANIMAL=(cat dog)
VALID_ACQUATIC_ANIMAL=(shark dolphin)
이제 ACQUATIC/DOMESTIC일 수 있는 또 다른 매개변수 CATAGORY가 있습니다. 반복할 예상 전역 변수를 선택하는 방법은 무엇입니까? 다음 코드를 시도했습니다.
#!/bin/bash
VALID_DOMESTIC_ANIMAL=(cat dog)
VALID_ACQUATIC_ANIMAL=(shark dolphin)
CATAGORY=ACQUATIC
VALID_CATAGORY_ANIMAL=VALID_${CATAGORY}_ANIMAL
#echo "VALID_CATAGORY_ANIMAL ${VALID_CATAGORY_ANIMAL}"
for anime in "${VALID_CATAGORY_ANIMAL[@]}"; do
echo "${anime}"
done
출력을 기대했지만 shark dolphin
결과가 나왔습니다.VALID_ACQUATIC_ANIMAL
동일한 이름의 변수가 존재하는 경우 이를 사용하도록 bash 스크립트에 어떻게 지시합니까?
답변1
답변2
이렇게 하면 상황이 더 명확해질 수 있습니다. 이 변수에는 다른 변수의 이름이 포함되어 있습니다. 해당 값을 얻으려면 쉘은 먼저 변수 이름을 확장한 다음 변수 값을 확장해야 합니다.
for anime in $(eval echo \${$VALID_CATAGORY_ANIMAL[@]}); do
eval
- 변수를 확장하고 실행을 위해 이를 셸에 전달하는 데 인수가 필요합니다.
첫 번째 달러 기호를 이스케이프했기 때문에 명령은 다음에서 실행됩니다.
$(echo ${VALID_ACQUATIC_ANIMAL[@]}
루프 앞에 다음 줄을 삽입할 수 있습니다.
echo $VALID_CATAGORY_ANIMAL #VALID_ACQUATIC_ANIMAL
echo \${$VALID_CATAGORY_ANIMAL[@]} #${VALID_ACQUATIC_ANIMAL[@]}
eval echo \${$VALID_CATAGORY_ANIMAL[@]} #shark, dolphin