come faccio a echo $ qualcosa >> file.txt senza ritorno a capo?


81

Quando I echo $something >> file.txt, una nuova riga verrà aggiunta al file.

Cosa succede se desidero aggiungere senza una nuova riga?


3
Fai attenzione echo $something, il suo comportamento dipende dalla IFSvariabile e potresti finire con il carattere che scompare. Puoi provare quanto segue: var="hello world"; echo $var(due spazi tra ciao e mondo) oppure var="hello world"; IFS='l'; echo $varoppure var="-e hello \\n world"; echo $var. Per risolverlo, inserisci le doppie virgolette attorno alla variabile in questo modo: echo "$var"oppure usa printf.
jfg956

Risposte:


96

Questo è ciò che echo -nserve.


4
C'è un equivalente per cat? (ad esempio quando si dispone di un file something.txtanziché di una variabile $something)
cboettig

1
@cboettig: No. Usa uno strumento diverso per stampare tutto tranne la riga finale.
Ignacio Vazquez-Abrams,

@cboettig, cat non aggiunge nulla all'output di default, quindi non è necessario un parametro '-n' per cat. ad esempio, se il tuo file non ha un finale di riga nell'ultima riga, il prompt della shell verrà stampato subito dopo l'ultimo carattere del file e non in una nuova riga
Rondo,

41

printfè molto flessibile e più portatile di echo. Come il C / Perl / etc implementazioni, se non si termina la stringa di formato con \nallora nessun capo ':

printf "%s" "$something" >> file.txt

7

Se stai usando l'output del comando, puoi usare xargs in combinazione con echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

0

tr è un'altra alternativa.

Se stai usando echocome input puoi scappare quale tr -d '\n'.

Questa tecnica funziona anche quando si esegue il piping dell'output da altri comandi (con una sola riga di output). Inoltre, se non sai se i file hanno terminazioni di linea UNIX o DOS puoi usare tr -d '\n\r'.

Ecco alcuni test che dimostrano che funziona.

Newline inclusa:

something='0123456789' ; echo ${something} | wc -c
11

Newline UNIX:

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

Stile DOS:

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

Testato con BSD tre GNU tr.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.