как мне отобразить $ что-то >> file.txt без возврата каретки?

81

Когда я echo $something >> file.txt, новая строка будет добавлена ​​в файл.

Что делать, если я хочу добавить без новой строки?

onemach
источник
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 для cat. например, если в вашем файле нет конца строки в последней строке, то приглашение оболочки будет напечатано сразу после последнего символа файла, а не в новой строке
Rondo
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
zainengineer
источник
0

tr другая альтернатива.

Если вы используете в echoкачестве входных данных, вы можете избежать чего tr -d '\n'.

Этот метод также работает при передаче результатов от других команд (только с одной строкой вывода). Более того, если вы не знаете, имеют ли файлы конец строки UNIX или DOS, вы можете использовать их tr -d '\n\r'.

Вот несколько тестов, показывающих, что это работает.

Новая строка включена:

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

UNIX newline:

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.

Ник Доай
источник