Por que o argumento string para ecoar omite a primeira palavra?

2

Estou tentando aprender sobre aqui-docs e aqui-strings. Eu gostaria de entender porque a saída de echo <<< more than one word omite a primeira palavra. Por exemplo.

> echo <<< more than one word
than one word
> echo <<< a b c
b c
>echo <<< "more than one word"
 -- <blank line> --

O mesmo comportamento não é verdadeiro cat:

>cat <<< "more than one word"
more than one word

O que pesquisei :

A Wikipedia Aqui documento artigo. Francamente, tenho a tendência de encontrar muitos artigos da Wikipédia abstrusos, incluindo os notados; Além disso, seus exemplos não abordaram esse problema específico.

Minha distro :

>cat /proc/version 
Linux version 3.11.10-301.fc20.x86_64 ([email protected]) (gcc version 4.8.2 20131017 (Red Hat 4.8.2-1) (GCC) ) #1 SMP Thu Dec 5 14:01:17 UTC 2013

Também não consegui encontrar uma pergunta existente no Superusuário sobre esse tópico específico.

StoneThrow
fonte
Que distro você está correndo?
Silas B
Post atualizado com minha distro.
StoneThrow

Respostas:

1

<<< alimenta o comando da mão esquerda stdin com a contraparte direita.

Isso tem um significado para o cat comando, que imprime sua stdin quando nenhum nome de arquivo é dado como argumento. Mas isso não tem significado para echo que sempre ignora sua stdin e só imprime seus argumentos.

A. Loiseau
fonte
0

Eu li esta outra resposta algumas vezes e não ficou claro para mim, até que percebi que <<< vê apenas a no seu lado direito e envia para o comando stdin. Isso significa

echo <<< a b c

é equivalente a

echo b c <<< a

ou até mesmo

<<< a echo b c

Ou seja b e c são argumentos para echo mesmo se eles estão depois <<< a (compare a equivalência de cat -n < foo.txt, cat < foo.txt -n, < foo.txt cat -n ).

Agora a afirmação

echo […] Sempre ignora sua stdin e só imprime seus argumentos

cumpre a explicação.

Kamil Maciorowski
fonte
-1

Boa resposta aqui

A string que você está digitando após o & lt; & lt; & lt; ' é um delimitador de texto. Você está usando três '& lt;' em vez de 2, o que pode estar causando o comportamento interessante que você está observando. Se você usar o comando cat em vez de echo, o comportamento será mais o que você espera.

Basicamente, as palavras 'mais' e 'a' estão sendo usadas como sinalizadores para identificar quando a sequência de múltiplas linhas foi finalizada.

smilingfrog
fonte
-1. O link é útil, mas a resposta parece confundir aqui string ( <<< sintaxe) e pura aqui documento ( << ). Delimitador de texto que você menciona é uma parte do aqui documento sintaxe, não se aplica ao caso em questão.
Kamil Maciorowski