Isso funciona em ksh93
, mas não em bash
, pois bash
executa o read
em um sub-shell:
echo "word1 word2 word3" | read w1 w2 w3
printf '"%s"\n' "$w1" "$w2" "$w3"
Isso significa que você simplesmente não pode ter uma atribuição como parte de um pipeline em bash
.
A solução alternativa é usar as variáveis antes da sub-shell do pipeline sair:
echo "word1 word2 word3" | { read w1 w2 w3 && printf '"%s"\n' "$w1" "$w2" "$w3"; }
ou
echo "word1 word2 word3" | {
read w1 w2 w3
printf '"%s"\n' "$w1" "$w2" "$w3"
}
Isso funciona nos dois shells:
read w1 w2 w3 <<<"word1 word2 word3"
printf '"%s"\n' "$w1" "$w2" "$w3"