Como eu adiciono um item a um array em um pipeline? [duplicado]

5

Esse script deve simplesmente adicionar um valor a uma matriz por meio de um loop e, em seguida, mostrar todos os itens de uma matriz.

#!/bin/bash

data_file="$1"
down=()
counter=0

cat $data_file | while read line; do \
    isEven=$(( $counter % 2 ))
    if [ $isEven -eq 0 ]; then
        down+=("$line")
    fi
    (( counter ++ ))
done

echo ${down[@]}   
exit

Mas tudo o que vejo é uma string vazia:

host@user$ sh script.sh data_file

host@user$

O data_file contém isto:

81.11
11.63
81.11
11.63
81.11
11.63
81.11
11.63 

Onde está o meu erro? Obrigado.

    
por hdf 21.08.2015 / 07:06

1 resposta

9

Você não pode fazer referência a atualizações de variáveis feitas no processo filho (pipe conectado durante o bloqueio).

Em vez disso, alimente os dados usando o redirecionamento de entrada assim:

#!/bin/bash

data_file="$1"
down=()
counter=0

while read line; do
    isEven=$(( $counter % 2 ))
    if [ $isEven -eq 0 ]; then
        down+=("$line")
    fi
    (( counter ++ ))
done < $data_file

echo ${down[@]}   
exit
    
por 21.08.2015 / 07:12

Tags