Como imprimir “-n” sem emitir uma nova linha?

16

Estou tentando imprimir -n usando o comando echo . Mas se eu simplesmente digitar echo -n , ele emitirá apenas uma nova linha, não será exibido -n , em vez disso, emitirá uma nova linha.

    
por Star OS 23.11.2015 / 18:46

9 respostas

28

O problema é que echo interpreta -n como argumento. Na implementação bash padrão, isso significa (de help echo ):

  -n  do not append a newline

Existem várias maneiras de contornar isso:

  1. Transforme em algo que não é uma opção, incluindo outro personagem. Por exemplo, diga a echo para não imprimir uma nova linha com -n e, em seguida, diga-a para interpretar vazamentos de barra invertida com -e e adicione a nova linha explicitamente.

    $ echo -ne '-n\n'
    -n
    
  2. Como alternativa, basta incluir um espaço

    $ echo " -n"
     -n
    

    Isso, no entanto, adiciona um espaço que você provavelmente não deseja.

  3. Use um caractere não imprimível antes dele. Aqui. Estou usando o backspace ( \b )

    $ echo -e "\b-n"
    -n
    

    Isso também adiciona um caractere extra que você provavelmente não deseja.

  4. Use truques

    $ echo n- | rev
    -n
    

    O comando rev simplesmente imprime sua saída invertida.

  5. Use a ferramenta certa para o trabalho

    $ printf -- '-n\n'
    -n
    
por terdon 23.11.2015 / 19:06
15

Às vezes, é uma boa ideia usar a ferramenta certa. Você poderia usar printf :

% printf "-n\n"       
-n
    
por A.B. 23.11.2015 / 18:50
7

Você pode usar este comando, mas adiciona um espaço extra.

echo -e  "\r-n"

Isso é uma espécie de hack.

-e ativa símbolos de comando de barra invertida.

\r é um retorno de carro.

Na verdade, qualquer caractere \ válido fará em qualquer lugar da string.

Você pode ver quais são válidos por help echo .

echo "-n" não funciona porque -n é usado como um parâmetro para echo .

P.S. A melhor solução é IMHO

echo -e "-n\c"

Não adiciona nenhum caractere extra .

echo -e "-n\n"

imprime o mesmo, mas com um novo caractere de linha.

    
por Pilot6 23.11.2015 / 18:56
5

Acho que se você quiser usar echo apenas, isso deve satisfazê-lo:

echo "-n "

Isso funciona porque, embora -n seja uma opção válida para echo , -n com um espaço depois disso, não é. Como não é uma opção, echo apenas imprime.

    
por Sadi 23.11.2015 / 18:53
5

Vocês estão realmente pensando demais sobre isso.

 echo -e \055n

Ou sem nova linha de acompanhamento

 echo -en \055n
    
por Joshua 23.11.2015 / 22:53
2

Para estender a resposta de @ A.B, a única maneira portátil de usar echo é evitar o uso de opções como -n . Considere o uso de printf , quando disponível. Esta página de referência fornece mais detalhes e explica muito bem quando e como echo e printf deve ser usado:

  

Hoje em dia, o echo (1) só é portátil se você omitir sinalizadores e seqüências de escape.   Use printf (1), se precisar de mais do que texto simples.

    
por Dmitry Grigoryev 24.11.2015 / 13:17
2

No script Bash você pode executar:

echo -n -
echo n

Ou no shell interativo:

echo -n - ; echo n

Esse caractere echo es a - e um caractere n .

    
por jiwopene 23.11.2015 / 21:30
1

Três outras formas:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n
    
por kos 25.11.2015 / 21:01
0

Você pode executar

printf -n;echo

Testado no Busybox Ash

    
por jiwopene 08.12.2015 / 21:46

Tags