Qual é a diferença entre usar
echo -e "Hello\nWorld"
e
echo $"Hello\nWorld"
ambos não produzem:
Hello
World
command-line
bash
Marca
fonte
fonte
Hello\nWorld
. Você precisa da-e
opção para interpretar caracteres de escape.echo $'Hello\nWorld'
, que serão impressas em duas linhas sob bash.Respostas:
echo -e
eecho $'...'
são semelhantes, pois suportam as seguintes seqüências de escape:Eles têm diferenças. Além do acima,
echo -e
suporta:Por outro lado,
$'....'
suporta:Observe que, entre os dois, as
\c
extensões são incompatíveis:Para
echo -e
cima,\c
suprime ainda mais a produção, ignorando assim aIstop
. Por outro lado, para$'...'
, o\cI
é interpretado como uma guia.A forma visualmente semelhante:
$"..."
Por outro lado
$'...'
, a função de$"..."
é bem diferente. Isso fará com que a string contida seja traduzida de acordo com o código do idioma atual.A
echo -e
controvérsiaecho -e
não é universalmente suportado por shells e muitos consideram a-e
opção um erro de design. Observar:Como você pode ver, se o que você está imprimindo
echo
começa com um traço, os resultados podem ser inesperados. A menos que você tenha certeza de que a primeira sequência com a qual você imprimiráecho
não começa com um traço, é provável que seja melhor usá-laprintf
.Por esses motivos, o padrão POSIX conclui :
Chet Ramey, que mantém
bash
nos últimos 22 anos, concorda :fonte
printf
, em vez deecho
*
) não é realmente específicoecho
. Isso acontece com qualquer comando que reconhece opções curtas ou longas (escritas da maneira tradicional) e aceita operandos de nome de arquivo, inclusivels
. Indiscutivelmente, a situação é um pouco pior,echo
já que (como sua fonte menciona)echo
normalmente não aceita--
indicar o final das opções, enquanto é possível escrever comandos comols -- *l
. (E realmente se deve, geralmente, para comandos de escrita dessa forma, ao usar globs que começam com*
ou-
, especialmente em scripts.)\n
seqüência de escape, então na verdade não importa se eu usarecho -e '...'
,echo $'...'
ouecho $"..."