Nasıl bir şey $ echo >> file.txt satırbaşına dönüş olmadan eklerim?


72

Ne zaman ben echo $something >> file.txt, dosyaya yeni bir satır eklenecektir.

Yeni bir satır olmadan eklemek istersem ne olur?


2
Dikkatli olun echo $something, davranışına göre IFS değişken ve kaybolan bir karakterle sonuçlanabilir. Aşağıdakileri deneyebilirsiniz: var="hello world"; echo $var (merhaba ve dünya arasında iki boşluk) veya var="hello world"; IFS='l'; echo $var veya var="-e hello \\n world"; echo $var. Bunu çözmek için, bu değişkenin etrafına çift tırnak işareti koyun: echo "$var", veya kullan printf.
jfg956

Yanıtlar:


85

Bu ne echo -n için .


4
İçin bir eşdeğeri var mı cat? (örneğin, bir dosyanız olduğunda something.txt değişken değil $something )
cboettig

1
@cboettig: Hayır. Son satırdan başka her şeyi yazdırmak için farklı bir araç kullanın.
Ignacio Vazquez-Abrams

@cboettig, cat çıkışa varsayılan olarak herhangi bir şey eklememektedir, bu nedenle cat için '-n' paramuna gerek yoktur. örneğin, dosyanızda son satırda bir satır sonu yoksa, kabuk istemi dosyanın son karakterinden hemen sonra yazdırılır ve yeni bir satırda değil
Rondo

36

printf çok esnek ve daha taşınabilir echo. Format dizesini sonlandırmazsanız C / Perl / etc uygulamaları gibi \n sonra yeni satır yazdırılmaz:

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

6

Komutun çıktısını kullanıyorsanız, xargs'ı echo ile birlikte kullanabilirsiniz

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

0

tr başka bir alternatif.

Kullanıyorsanız echo girişiniz olarak hangi tr -d '\n'.

Bu teknik, diğer komutlardan çıkışta borulama yaparken de çalışır (yalnızca tek bir çıkış satırı ile). Ayrıca, dosyaların UNIX veya DOS satır sonları olup olmadığını bilmiyorsanız, kullanabilirsiniz tr -d '\n\r'.

İşte bunun işe yaradığını gösteren bazı testler.

Newline dahil:

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

UNIX newline:

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

DOS tarzı:

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

BSD ile test edildi tr ve GNU tr.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.