Fala Jamenson,
acho que vc não entendeu o que falei, já que eu nunca disse que não se deve usar pipes. O que sempre digo é que não se deve utilizar pipes desnecessários.
Sou fã ardoroso do pipe e acho que ele é um dos grandes responsáveis pela programação em Shell ser tão enxuta.
Se here strings (<<<) foi criado para que usemos construções do tipo:
CMD <<< CADEIA
no lugar de echo CADEIA | CMD
Pq devemos continuar usando a forma arcaica e ineficiente?
Mas, no meu entender, o problema nem é o fato de ser ligeiramente mais lento, é o fato dele (assim com substituição de cmds, subst. de processos, uso de parênteses, ...) rodar em um subshell e todo o ambiente criado dentro desse subshell morre ao seu fim. Para simular, vou usar parênteses para criar um subshell:
$ var=1; (
> echo No início, já no subshell, var tem $var
> echo Somei 1 e var passou a ter $((++var))
> ); echo Saindo do subshell var voltou a ter $var
No início, já no subshell, var tem 1
Somei 1 e var passou a ter 2
Saindo do subshell var voltou a ter 1
Como vc pode ver, o valor adquirido dentro dos parênteses foi para o brejo... Veja esse:
$ pwd; (cd /; pwd); pwd
/home/julio/tstsh
/
/home/julio/tstsh
Voltando ao pipe, se vc quiser ler um arquivo e for contando a qtd de linhas para listar no final, vc não pode fazer algo do tipo:
cat /etc/passwd | while IFS=: read Lname Lixo; do
echo -e $((++ContaLinha)) $Lname
done; echo Meu etc/passwd tem $ContaLinha linhas
Pq ContaLinha estará vazio... É só copiar e colar para testar.
Julio
» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em 27/01/2020 abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:
Também damos treinamento em sua empresa
em qualquer cidade, com certificado e nota fiscal.