Como imprimo '-e' com eco?

Como imprimo '-e' com eco?

Eu sei que echo -enão é um comando comum. Eu tentei echo '-e'e echo \-emas 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á echod.


Aliás,a especificação do comando shell POSIX paraechoreconhece 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 -eBS move o cursor uma coluna para trás para a esquerda, fazendo com que -o SPC seja sobrescrito)

O comportamento do bashbuiltin echopode depender da versão do bash. Também depende do ambiente ( POSIXLY_CORRECT, SHELLOPTSe BASHOPTSvariáveis), das opções ( posix, xpg_echo), das opções de construção e argv[0]( shvs 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 echocom -eos códigos ASCII para os caracteres:

$ /bin/echo -e '\055'e
-e

055é o número ASCII octal para -(veja man asciipara referência rápida).

Responder4

Use -npara evitar nova linha:

$ echo -n - && echo e
-e

informação relacionada