bash
executa o lado direito de um pipeline em um < href="https://www.gnu.org/software/bash/manual/bashref.html#Command-Execution-Environment"> contexto subshell , portanto, alterações em variáveis (que é o que read
faz ) não são preservados - eles morrem quando o subshell, no final do comando.
Em vez disso, você pode usar a substituição de processos :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
Nesse caso, read
está sendo executado em nosso shell principal e nosso comando de produção de saída é executado no subshell. A sintaxe <(...)
cria uma subshell e conecta sua saída a um canal, que redirecionamos para a entrada de read
com a <
operation . Como read
foi executado em nosso shell principal, as variáveis estão definidas corretamente.
Como apontado em um comentário, se seu objetivo é literalmente dividir uma string em variáveis de alguma forma, você pode usar um aqui string :
read a b dump <<<"1 2 3 4 5"
Eu suponho que há mais do que isso, mas esta é uma opção melhor se não houver.