$ echo date | wc 1 1 5
como contador de bytes == 5 (= sizeof ("date")) parece que a data não foi executada
mas
$ echo date | xargs time
executa a data como comando
quando escrevo um comando
$ echo date
em seguida, imprime "data" como é, por exemplo, não executa o programa de data.
Mas quando eu escrevo
$ echo date | wc
então a resposta correta é produzida como se a data tivesse sido executada. Como a tubulação está fazendo diferença aqui?
Por favor explique.
$ echo date | wc 1 1 5
como contador de bytes == 5 (= sizeof ("date")) parece que a data não foi executada
mas
$ echo date | xargs time
executa a data como comando
Isso não acontece.
Tente:
echo date | cat > here.out
tente:
echo 'date' | cat > here.out
O problema é que 'echo' envia o seguinte texto para a saída padrão. O texto, neste caso, é 'date', então o que você mostra não funciona. Isto irá: echo | date porque data agora produz o texto para echo.
echo 'date' é o que você quer.
Tem a ver com o modo como o bash usa strings.
Se você olhar o que é armazenado nessas variáveis
d1=date
d2="date"
d3='date'
d4='date'
Você notará que d1, d2 e d3 são apenas strings que contêm "data", d4 no entanto, tem o resultado da data do comando executado.
Se, então, levarmos isso um passo adiante e vermos se podemos encontrar alguma diferença entre essas sequências.
d4='date +%Y%m%d'
echo $d4
Isso significa que agora temos "20100418" armazenado em $ d4.
d3='$d4'
echo $d3
Agora, em $ d3, imprimimos a string "$ d4", exatamente esses 3 caracteres ...
d2="$d4"
echo $d2
Agora aqui nós temos "20100418" armazenado em $ d2 desde que imprimimos $ d4 e salvamos essa saída na variável $ d2.
d1=$d4
echo $d1
E então você tem uma cópia do conteúdo da variável $ d4 na variável $ d1.
Espero que isso esclareça um pouco como essas cordas funcionam.
E agora, voltemos à sua pergunta.
cj@zap:~$ echo date | wc
1 1 5
cj@zap:~$ echo 'date' | wc
1 6 31
cj@zap:~$ date | wc
1 6 31
Agora, o que isso realmente significa? O homem wc nos dá isso:
NAME wc - print newline, word, and byte counts for each file
Então "1 1 5" acabou de nos dizer que temos 1 nova linha, 1 palavra e 5 caracteres, e isso corresponde à data \ n.
E "1 6 31" corresponderá a "sön 18 de abril de 2010 10.07.25 CEST \ n", já que foi isso que meu comando de data me deu ...