як я повторюю $ щось >> file.txt без повернення каретки?


81

Коли я echo $something >> file.txt, новий файл буде доданий до файлу.

Що робити, якщо я хочу додати без нового рядка?


3
Будьте обережні echo $something, її поведінка залежить від IFSзмінної, і ви можете закінчитися зникненням характеру. Ви можете спробувати наступне: var="hello world"; echo $var(два проміжки між привіт і світом) або var="hello world"; IFS='l'; echo $varабо var="-e hello \\n world"; echo $var. Щоб вирішити це, поставте подвійні лапки навколо змінної на зразок цієї: echo "$var"або використовуйте printf.
jfg956

Відповіді:


96

Ось для чого echo -n.


4
Чи існує еквівалент cat? (наприклад, коли у вас є файл, something.txtа не змінна $something)
cboettig

1
@cboettig: Ні. Використовуйте інший інструмент для друку всього, крім остаточного нового рядка.
Ігнасіо Васкес-Абрамс

@cboettig, cat за замовчуванням нічого не додає до виводу, тому немає необхідності в параметрі '-n' для кішки. наприклад, якщо у вашому файлі немає останнього рядка в останньому рядку, запит оболонки буде надруковано відразу після останнього символу файлу, а не в новому рядку
Рондо

41

printfдуже гнучка і портативна, ніж echo. Як і у виконанні C / Perl / etc, якщо ви не скасуєте рядок формату, \nтоді не буде надруковано новий рядок:

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

7

Якщо ви використовуєте висновок команди, ви можете використовувати xargs у поєднанні з echo

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

0

tr є ще однією альтернативою.

Якщо ви використовуєте echoяк свій внесок, ви можете отримати який tr -d '\n'.

Ця методика працює також під час передачі даних у вихідні дані з інших команд (лише один рядок виводу). Крім того, якщо ви не знаєте, чи мають файли закінчення UNIX або DOS, ви можете використовувати tr -d '\n\r'.

Ось кілька тестів, які показують, що це працює.

Новий рядок:

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

Нова лінія UNIX:

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

Стиль DOS:

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

Тестували з BSD trта GNU tr.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.