Bash 3.0은 목록을 지원하지 않습니까?

Bash 3.0은 목록을 지원하지 않습니까?

구성 파일에서 가져온 특정 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")
    

    말할 필요도 없이 후자의 시나리오는 피하는 것이 가장 좋습니다. 배열이 처음에 희소한 경우 배열 인덱스는 할당 후에 변경됩니다.

관련 정보