나는 이것을 할 수 있지만 변수의 문자열을 만든 다음 참조 해제해야합니다. 더 간단한 진술로 단축 할 수있는 방법이 있습니까?
#!/bin/bash
FRUITS="BANANA APPLE ORANGE"
BANANA_COLOUR="Yellow"
APPLE_COLOUR="Green or Red"
ORANGE_COLOUR="Blue"
for fruit in $( echo $FRUITS ); do
fruit_colour="${fruit}_COLOUR"
echo $fruit is ${!fruit_colour}
done
나는 ${!"${fruit}_COLOUR"}
또는 \$${fruit}_COLOUR
많은 다른 변형 을 시도했지만 효과가있는 유일한 방법은 문자열을 사용하는 것입니다.
!
구문은 기본적으로 "두 번 대체"라는 변수 치환에 플래그입니다. 내부의 내용${…}
이 변수 이름이어야 한다는 요구 사항은 변경하지 않습니다 . 따라서 다른 방법 (eval
) 을 사용하지 않으면 이름이 포함 된 변수를 사용하지 않아도 됩니다.