Bash 3.0 não suporta listas?

3

Eu escrevi um pequeno script que adiciona endereços IP particulares de um arquivo de configuração e os coloca em uma lista:

  WAS_IP=$(grep "<was_ip>" $CONFIG| cut -d '>' -f 2 | cut -d '<' -f 1 | xargs)

  NODES=()
  NODES+=("$WAS_IP")

No bash 3.2.25 , isso funciona bem, mas no 3.0 onde eu tenho meu ambiente de produção, isso causa um erro:

./config.sh: line 3154: syntax error near unexpected token '"$WAS_IP"'
./config.sh: line 3154: '      NODES+=("$WAS_IP")'

Como posso evitar esse problema?

    
por Patryk 11.02.2013 / 14:53

1 resposta

5

O operador += apareceu na versão 3.1 do Bash.

  • Em versões mais antigas, se a matriz não é esparsa, você pode atribuir ao elemento após o último elemento da matriz:

    NODES[${#NODES[@]}]="$WAS_IP"
    

    Se você adicionar novos valores em um determinado local, poderá usar uma variável de contador separada:

    NODES=()
    NODES_length=0
    NODES[NODES_length++]="$WAS_IP"
    

    Mas isso é apenas moderadamente mais rápido do que perguntar o tamanho do array com ${#NODES[@]} .

  • Ou você pode atribuir toda a matriz aos elementos existentes e à nova:

    NODES=("${NODES[@]}" "$WAS_IP")
    

    Escusado será dizer, melhor evitar este último. Se a matriz foi inicialmente esparsa, os índices da matriz terão mudado após essa atribuição.

por 11.02.2013 / 15:04

Tags