我如何回显$ something >> file.txt而没有回车?


81

当我echo $something >> file.txt,新行将追加到文件。

如果我不添加任何新行怎么办?


3
请注意echo $something,它的行为取决于IFS变量,并且最终可能会导致字符消失。您可以尝试以下操作:var="hello world"; echo $var(hello和world之间的两个空格)或var="hello world"; IFS='l'; echo $varvar="-e hello \\n world"; echo $var。要解决此问题,请在变量周围加上双引号,例如:echo "$var"或使用printf
jfg956'3

Answers:


96

echo -n是为了什么。


4
有相当于cat吗?(例如,当您有文件something.txt而不是变量时$something
cboettig

1
@cboettig:否。使用其他工具打印除最终换行符以外的所有内容。
Ignacio Vazquez-Abrams

@cboettig,cat默认情况下不向输出添加任何内容,因此cat不需要'-n'参数。例如,如果您的文件的最后一行没有换行符,那么将在文件的最后一个字符之后而不是换行显示shell提示
Rondo

41

printfecho。更加灵活和便携。像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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.