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.