Adicionando aos arrays [duplicados]

1

Eu tenho esse script

tests=()
igrepy -l $1 . | while read -r line
do
    // some processing
    tests+=("${second[0]}")
done
echo ${tests[@]}

Eu verifiquei que o 'segundo' tem um resultado, mas o meu eco retorna uma string vazia. O que deu errado aqui? Isso é no rhel6, 'igrepy' é um alias para um grep insensitivo a maiúsculas e minúsculas que somente pesquisa arquivos python

    
por Madden 14.09.2016 / 18:00

1 resposta

4

O problema que você está vendo é o "pipe cria subshell" padrão com bash .

por exemplo, se você fizer

a=10
echo 100 | read a
echo $a

então a ainda será definido como 10 com bash.

No seu caso você tem

igreppy | while read ...
do
  ....
done

e todas as coisas dentro desse while do loop estarão em uma subcamada.

Em vez disso, ele pode ser reescrito usando a substituição do processo

while read ...
do
  ....
done < <(igreppy ...)

Agora nenhum subshell é criado para o loop while .

    
por 14.09.2016 / 18:27

Tags