Come stampare "-n" senza emettere una nuova riga?

16

Sto provando a stampare -n usando il comando echo . Ma se digito semplicemente echo -n , emette solo una nuova riga, non mostra -n , invece emette una nuova riga.

    
posta Star OS 23.11.2015 - 18:46

9 risposte

28

Il problema è che echo interpreta il -n come argomento. Nell'implementazione di bash predefinita, ciò significa (da help echo ):

% Bl0ck_qu0te%

Ci sono vari modi per aggirare questo:

  1. Trasformalo in qualcosa che non è un'opzione includendo un altro personaggio. Ad esempio, dì a echo di non stampare una nuova riga con -n , quindi digli di interpretare i backslash escape con -e e aggiungi la nuova riga in modo esplicito.

    $ echo -ne '-n\n'
    -n
    
  2. In alternativa, includi solo uno spazio

    $ echo " -n"
     -n
    

    Questo, tuttavia, aggiunge uno spazio che probabilmente non vuoi.

  3. Usa un carattere non stampabile prima di esso. Qui. Sto usando il backspace ( \b )

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

    Questo aggiunge anche un carattere extra che probabilmente non vuoi.

  4. Usa l'inganno

    $ echo n- | rev
    -n
    

    Il comando rev stampa semplicemente l'output invertito.

  5. Utilizza lo strumento giusto per il lavoro

    $ printf -- '-n\n'
    -n
    
risposta data terdon 23.11.2015 - 19:06
15

A volte è una buona idea usare lo strumento giusto. Potresti usare printf invece:

% printf "-n\n"       
-n
    
risposta data A.B. 23.11.2015 - 18:50
7

Puoi usare questo comando, ma aggiunge uno spazio extra.

echo -e  "\r-n"

Questo è un tipo di hack.

-e attiva i simboli di comando backslash.

\r è un ritorno a capo.

In realtà qualsiasi carattere valido per \ funzionerà in qualsiasi punto della stringa.

Puoi vedere quali sono validi per help echo .

echo "-n" non funziona perché -n è utilizzato come parametro per echo .

P.S. La soluzione migliore è IMHO

echo -e "-n\c"

Non aggiunge caratteri extra .

echo -e "-n\n"

stampa lo stesso ma con un nuovo carattere di riga.

    
risposta data Pilot6 23.11.2015 - 18:56
5

Penso che se si desidera utilizzare solo echo , questo dovrebbe soddisfare:

echo "-n "

Funziona perché mentre -n è un'opzione valida per echo , -n con uno spazio dopo non lo è. Poiché non è un'opzione, echo lo stampa.

    
risposta data Sadi 23.11.2015 - 18:53
5

Voi ragazzi lo state davvero pensando troppo.

 echo -e \055n

O senza riga finale finale

 echo -en \055n
    
risposta data Joshua 23.11.2015 - 22:53
2

Per estendere la risposta di @ A.B, l'unico modo portatile per usare echo è di astenersi dall'usare qualsiasi opzione come -n . Considera l'uso printf invece dove disponibile. Questa pagina di riferimento fornisce maggiori dettagli e spiega molto bene quando e come echo e% dovrebbe essere usato co_de%:

% Bl0ck_qu0te%     
risposta data Dmitry Grigoryev 24.11.2015 - 13:17
2

Nello script Bash puoi eseguire:

echo -n -
echo n

O nella shell interacive:

echo -n - ; echo n

Questo echo es un - carattere e un n carattere.

    
risposta data jiwopene 23.11.2015 - 21:30
1

Altri tre modi:

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

Puoi eseguire

printf -n;echo

Testato in Busybox Ash

    
risposta data jiwopene 08.12.2015 - 21:46

Leggi altre domande sui tag