当我在Bash中执行命令时(或者更确切地说,wc -l < log.txt),输出后包含一个换行符。我怎样才能摆脱它呢?


当前回答

Printf已经为你裁剪了后面的换行符:

$ printf '%s' $(wc -l < log.txt)

细节:

Printf将打印您的内容,以代替%s字符串占位符。 如果你不告诉它打印换行符(%s\n),它就不会打印。

其他回答

如果你将它的输出赋值给一个变量,bash会自动删除空白:

linecount=`wc -l < log.txt`

Printf已经为你裁剪了后面的换行符:

$ printf '%s' $(wc -l < log.txt)

细节:

Printf将打印您的内容,以代替%s字符串占位符。 如果你不告诉它打印换行符(%s\n),它就不会打印。

如果你想在Bash中输出任何内容而不带行尾,可以使用-n开关进行回显。

如果你已经在变量中有它了,那么用后面的换行符进行回显:

$ testvar=$(wc -l < log.txt)
$ echo -n $testvar

或者你可以用一行来代替:

$ echo -n $(wc -l < log.txt)

在Bash变量替换中也直接支持空格移除:

testvar=$(wc -l < log.txt)
trailing_space_removed=${testvar%%[[:space:]]}
leading_space_removed=${testvar##[[:space:]]}

使用Awk:

awk -v ORS="" '1' log.txt 

解释:

ORS的-v赋值 ORS -输出记录分隔符设置为空白。这将用""替换新行(输入记录分隔符)