Ответы:
Вот для чего echo -n.
cat? (например, когда у вас есть файл, something.txtа не переменная $something)
printfочень гибкий и более портативный, чем echo. Как и в реализациях C / Perl / etc, если вы не завершаете строку форматирования, \nто новая строка не печатается:
printf "%s" "$something" >> file.txt
Если вы используете вывод команды, вы можете использовать xargs в сочетании с echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
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.
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.