¿Cómo hago eco de $ something >> file.txt sin retorno de carro?

81

Cuando yo echo $something >> file.txt, una nueva línea se agregará al archivo.

¿Qué sucede si deseo agregar sin una nueva línea?

onemach
fuente
3
Tenga cuidado al hacerlo echo $something, su comportamiento depende de la IFSvariable, y podría terminar con un carácter que desaparece. Puede intentar lo siguiente: var="hello world"; echo $var(dos espacios entre hola y mundo) o var="hello world"; IFS='l'; echo $varo var="-e hello \\n world"; echo $var. Para resolver eso, ponga comillas dobles alrededor de la variable como esta:, echo "$var"o use printf.
jfg956

Respuestas:

96

Para eso echo -nes eso .

Ignacio Vazquez-Abrams
fuente
44
¿Hay un equivalente para cat? (por ejemplo, cuando tiene un archivo en something.txtlugar de una variable $something)
cboettig
1
@cboettig: No. Use una herramienta diferente para imprimir todo excepto la nueva línea final.
Ignacio Vazquez-Abrams
@cboettig, cat no agrega nada a la salida de forma predeterminada, por lo que no hay necesidad de un parámetro '-n' para cat. por ejemplo, si su archivo no tiene un final de línea en la última línea, su solicitud de shell se imprimirá justo después del último carácter del archivo y no en una nueva línea
Rondo
41

printfEs muy flexible y más portátil que echo. Al igual que las implementaciones de C / Perl / etc., si no termina la cadena de formato con \nninguna línea nueva se imprime:

printf "%s" "$something" >> file.txt
Glenn Jackman
fuente
7

Si está utilizando la salida del comando, puede usar xargs en combinación con echo

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

tr Es otra alternativa.

Si está utilizando echocomo entrada, puede escapar de cuál tr -d '\n'.

Esta técnica también funciona al canalizar la salida de otros comandos (con una sola línea de salida). Además, si no sabe si los archivos tienen terminaciones de línea UNIX o DOS, puede usarlos tr -d '\n\r'.

Aquí hay algunas pruebas que muestran que esto funciona.

Newline incluido:

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

Línea nueva UNIX:

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

Estilo DOS:

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

Probado con BSD try GNU tr.

Nic Doye
fuente