유사한 유형의 여러 환경 변수에서 배열 만들기

유사한 유형의 여러 환경 변수에서 배열 만들기

3개의 다른 변수를 사용하고 다른 변수의 설정에 따라 하나의 변수만 반환하는 bash 스크립트를 만들고 싶습니다. 그러므로 만일

TESTA_HOST=test1.google.com
TESTB_HOST=test2.google.com
TESTC_HOST=test3.google.com
M_INDEX=2

우리는 배열로 끝나는 모든 환경 변수를 검색하고 _HOST이를 인덱스와 비교하는 데 사용할 수 있습니다.

HOSTS="$(compgen -A variable | grep _HOST)"
export MAIN_URI="${HOSTS[M_INDEX]}"
echo $MAIN_URI

예상되는 출력은 test3.google.com변수 내용이 아닌 변수 이름만 반환하기 때문에 작동하지 않는다는 것입니다. 내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

이것,

HOSTS="$(compgen -A variable | grep _HOST)"

HOSTS단일 문자열로 설정

테스트 호스트[새 팀]TESTB_HOST[새 팀]테스트 호스트

인덱싱은 그다지 유용하지 않으며 ${HOSTS[0]}와 동일하며 비어 있습니다.${HOSTS}${HOSTS[1]}

대신에 할당하면

HOSTS=( $(compgen -A variable | grep _HOST) )

그런 다음 출력은 compgen토큰화되고(전역으로 확장됨) HOSTS결과를 포함하는 배열이 됩니다. 이 배열의 값은 변수의 이름이며 해당 값을 얻으려면 간접 참조가 필요합니다. 이는 이제 "포인팅" 변수의 값으로 확장됩니다 index.

"${!HOSTS[M_INDEX]}"

배열 할당에서는 기본값이 있고 IFS변수에 공백이나 와일드카드가 포함될 수 없다고 가정합니다.


변수에 이름이 지정된 경우 HOST_this( HOST_that앞에 고정 부분이 있음) 해당 변수를 생성하는 이름 목록을 사용 하고 또는 토큰 화를 "${!HOST_@}"포함하지 않고 배열에 직접 할당 할 수 있습니다 .compgengrep

관련 정보