bash
executa o lado direito de um pipeline em um contexto de subshell , para que as alterações nas variáveis (que é o que read
faz) não sejam preservadas - elas morrem quando o subshell faz, no final do comando.
Em vez disso, você pode usar a substituição de processo :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
Nesse caso, read
está sendo executado em nosso shell primário e nosso comando de produção de saída é executado no subshell. A <(...)
sintaxe cria um subshell e conecta sua saída a um canal, para o qual redirecionamos para a entrada read
com a <
operação comum . Por ser read
executado em nosso shell principal, as variáveis estão definidas corretamente.
Conforme indicado em um comentário, se seu objetivo é literalmente dividir uma sequência em variáveis de alguma forma, você pode usar uma sequência aqui :
read a b dump <<<"1 2 3 4 5"
Presumo que há mais do que isso, mas essa é uma opção melhor, se não houver.