Enquanto procurava a verdade pura echo
, encontrei esta página:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
Normalmente é um frame HTML neste site https://pubs.opengroup.org/onlinepubs/9699919799/ (onde você pode procurar por "echo").
Isso afirma ser POSIX, mas não vejo -n
e vejo \c
em vez disso!
O que eu encontrei?
GracefulRestart aponta que /bin/echo
reconhece \c
, mas não faz isso por padrão: Devo fazer echo -e
para \c
ser reconhecido.
Você encontrou o IEEE 1003.1-2017, também conhecido como Single Unix Specification , publicado pelo The Open Group.
Para saber mais, consulte " O que exatamente é POSIX? ", " Diferença entre POSIX, Especificação Unix UNIX e Especificações Base de Grupo Aberto? ", e todas as perguntas e respostas vinculadas.
O
-n
está lá, em negrito não menos, então é difícil perder. E sim,\c
é padrão.As variações de comportamento de
echo
são notórias. Você não deve se surpreender que/bin/echo
não seja o mesmo que um shell embutidoecho
, e que um requer um-e
onde o outro não. Nem é tão simples.Para uma explicação longa, veja " Por que printf é melhor que echo? ".
Para a variabilidade pouco conhecida de
printf
, ironicamente envolvendo a mesma\c
sequência de escape, consulte " Bash printf formating not working ".Se você estava em uma plataforma certificada POSIX com a marca UNIX,
echo
manipulava\c
por padrão.Isso se aplica a Solaris, AIX, HP-UX e Apple.
A Apple até usa
bash
para dar suporte a esse comportamento de eco, mas você precisa de uma opção de compilação específica para torná-labash
compatível por padrão. Esta opção de compilaçãobash
é usada para MacOS e Solaris. Então as pessoas podem ficar confusas quando percebem quebash
se comporta diferente em uma plataforma certificada POSIX,Lembre-se:
GNU
lê GNU não é UNIX... muitas ferramentas GNU não são compatíveis com POSIX ou não são compatíveis com POSIX por padrão. Portanto, tenha cuidado quando não estiver em uma plataforma certificada.BTW: Você pode obter a marca POSIX para pequenas plataformas incorporadas mesmo quando não oferece suporte a
echo \c
, mas para umaUNIX
marca, você precisa oferecer suporte a todas asXSI
extensões para POSIX. O Linux não suporta a maioria dasXSI
extensões. Muitas distribuições Linux, por exemplo, usamdash
como shell padrão edash
id definitivamente não compatível, por exemplo, porque não suporta caracteres multi byte.