구성 파일에서 가져온 특정 IP 주소를 추가하고 이를 목록에 넣는 작은 스크립트를 작성했습니다.
WAS_IP=$(grep "<was_ip>" $CONFIG| cut -d '>' -f 2 | cut -d '<' -f 1 | xargs)
NODES=()
NODES+=("$WAS_IP")
Bash에서는 3.2.25
잘 작동하지만 3.0
프로덕션 환경에서는 오류가 발생합니다.
./config.sh: line 3154: syntax error near unexpected token `"$WAS_IP"'
./config.sh: line 3154: ` NODES+=("$WAS_IP")'
이 문제를 어떻게 피할 수 있습니까?
답변1
이 +=
연산자는 Bash 버전 3.1에 등장했습니다.
이전 버전에서는 배열이 희박하지 않은 경우 배열의 마지막 요소 뒤의 요소에 할당할 수 있었습니다.
NODES[${#NODES[@]}]="$WAS_IP"
어딘가에 새 값을 추가하는 경우 별도의 카운터 변수를 사용할 수 있습니다.
NODES=() NODES_length=0 NODES[NODES_length++]="$WAS_IP"
하지만 이는 배열의 길이를 묻는 것보다 빠릅니다
${#NODES[@]}
.또는 전체 배열을 기존 요소와 새 요소에 할당할 수 있습니다.
NODES=("${NODES[@]}" "$WAS_IP")
말할 필요도 없이 후자의 시나리오는 피하는 것이 가장 좋습니다. 배열이 처음에 희소한 경우 배열 인덱스는 할당 후에 변경됩니다.