2012-06-25 25 views
311

Ho un problema con echo nel mio script:'echo' senza ritorno a capo in uno script di shell

echo -n "Some string..." 

stampe

-n Some string... 

e si sposta alla riga successiva. Nella console che sta funzionando correcly senza ritorno a capo:

Some string... 
+2

Quali Bourne shell implementazione stai usando? Se eseguo 'bash' in modalità shell di bourne, funziona bene qui. Inoltre, è alquanto improbabile che tu stia davvero usando una shell boreale come shell interattiva, no? – FatalError

+3

su Ubuntu: testo "echo -ne" senza nuova riga: "; echo "some text"; ' – zsoltii

risposta

334

Non ci sono più versioni del comando echo, con comportamenti diversi. Apparentemente la shell utilizzata per il tuo script utilizza una versione che non riconosce -n.

Il comando printf ha un comportamento molto più consistente. echo va bene per cose semplici come echo hello, ma suggerisco di usare printf per qualcosa di più complicato.

Quale sistema sei tu, e quello di shell fa uso lo script?

+34

Iniziando con la riga' #!/bin/bash' ha funzionato. Normalmente sto lavorando con bash. – qwertz

+0

Vorrei che ci fosse un equivalente di Windows in CMD :(Per quanto posso vedere, non c'è, solo soluzioni alternative per ottenere lo stesso comportamento –

+2

@kayleeFrye_onDeck: Forse c'è una versione di Windows del comando 'printf'. –

51

Prova con

echo -e "Some string...\c" 

Funziona per me come previsto (come ho capito dalla tua domanda).

Si noti che ho ricevuto queste informazioni dalla pagina man. La pagina di man rileva inoltre il guscio può avere la sua propria versione di echo, e io non sono sicuro se bash ha la sua versione.

+0

+1 per suggerirmi nella giusta direzione, sebbene l'eco che non riconosce -ne l'opzione probabilmente non riconosce l'opzione -e (né serve), quindi probabilmente vorrai semplicemente dire "echo" una stringa ... \ c "' invece. Se tuttavia hai bisogno di supportare più varianti di bash con comandi echo molto diversi probabilmente stai meglio usando printf o devi controllare le capacità dei comandi di eco con qualcosa come '[-n" $ (echo -e) "] && echo" sh stuff \ c "|| echo -e "bash stuff \ c" '(almeno bash supporta \ c, quindi non c'è bisogno di usare l'opzione -n, ma è necessario il -e per bash) – Timo

+0

\ c grazie .. lavorato –

78

bash ha un comando "built-in" chiamato "eco":

$ type echo 
echo is a shell builtin 

Inoltre, v'è un comando "echo" che è un eseguibile corretto (cioè, le forche shell e dirigenti /bin/echo, al contrario di interpretare echo e avviandolo):

$ ls -l /bin/echo 
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo 

Il comportamento di una WRT echo s' per \c e -n varia. La cosa migliore è quella di utilizzare printf, che è disponibile in quattro gusti diversi * nix che ho guardato:

$ printf "a line without trailing linefeed" 
$ printf "a line with trailing linefeed\n" 
+2

Grazie per il risposta massicciamente profonda! – Fuser97381

0

Se si utilizza l'eco all'interno di un caso con altri comandi, come "leggere", potrebbe ignorare l'impostazione e salterà comunque su una nuova riga.

Problemi correlati