
Eu sei que echo -e
não é um comando comum. Eu tentei echo '-e'
e echo \-e
mas eles ainda não funcionam.
Responder1
A melhor solução não é usar echo
, mas sim usar printf
.
printf '%s\n' -e
Isso funciona com variáveis arbitrárias:
var=-e
printf '%s\n' "$var"
... o que significa que você não precisa fazer nenhuma preparação/modificação especial em outro lugar do seu código com base no conhecimento de que um valor será echo
d.
Aliás,a especificação do comando shell POSIX paraecho
reconhece que não é portável conforme implementado e contém uma nota sobre esse assunto:
Não é possível usar echo portável em todos os sistemas POSIX, a menos que as sequências -n (como o primeiro argumento) e de escape sejam omitidas.
O utilitário printf pode ser usado de forma portátil para emular qualquer um dos comportamentos tradicionais do utilitário echo como segue (assumindo que IFS tenha seu valor padrão ou não esteja definido):
O eco histórico do System V e os requisitos para implementações XSI neste volume do POSIX.1-2008 são equivalentes a:
printf "%b\n" "$*"
O eco BSD é equivalente a:
if [ "X$1" = "X-n" ] then shift printf "%s" "$*" else printf "%s\n" "$*" fi
Novos aplicativos são incentivados a usar printf em vez de echo.
(Enfase adicionada).
Dito isto, nos sistemas GNU existe uma alternativa: solicitar comportamento compatível com os padrões.
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
Responder2
com nova linha
echo -en '-e\n'
sem nova linha
echo -e '-e\c'
com espaços ao redor:
echo '-e ' echo ' -e'
usando backspace (graças a Joseph R.):
echo -e ' \b-e'
(ele gera SPC BS - e LF, mas quando enviado para um terminal que é renderizado como
-e
BS move o cursor uma coluna para trás para a esquerda, fazendo com que-
o SPC seja sobrescrito)
O comportamento do bash
builtin echo
pode depender da versão do bash. Também depende do ambiente ( POSIXLY_CORRECT
, SHELLOPTS
e BASHOPTS
variáveis), das opções ( posix
, xpg_echo
), das opções de construção e argv[0]
( sh
vs bash
). Aqui testado com GNU bash 4.2.53(1)
build padrão, opções padrão, ambiente vazio, invocado como bash
. Funciona também com zsh 5.0.5
.
Responder3
Com GNU echo
com -e
os códigos ASCII para os caracteres:
$ /bin/echo -e '\055'e
-e
055
é o número ASCII octal para -
(veja man ascii
para referência rápida).
Responder4
Use -n
para evitar nova linha:
$ echo -n - && echo e
-e