Printf在BASH中添加换行符,我不知道如何摆脱它们

时间:2013-03-12 14:47:38

标签: bash printf

我在BASH脚本中有以下printf语句,可以很好地显示我的脚本输出:

printf "%-20s %-25s %-5s %-10s %-20s \n" $hostn $kernl $uptim $owner $team

此输出如下:

Hostname1        2.6.32.12-0.7-default     307   Lastname, Firstname
Team1
Hostname2        2.6.32.12-0.7-default     270   Lastname, Firstname
Team1
Hostname3        2.6.32.12-0.7-default     298   Lastname, Firstname
Team1
Hostname4        2.6.32.12-0.7-default     271   Lastname, Firstname
Team2

我不确定为什么要将这个团队添加到新线路中。我尝试添加另一个字段,但它做同样的事情:

printf "%-20s %-25s %-5s %-10s %-20s %s\n" $hostn $kernl $uptim $owner $team "test"

Hostname1        2.6.32.12-0.7-default     307   Lastname, Firstname         Team1
test
Hostname2        2.6.32.12-0.7-default     270   Lastname, Firstname         Team1
test
Hostname3        2.6.32.12-0.7-default     298   Lastname, Firstname         Team1
test
Hostname4        2.6.32.12-0.7-default     271   Lastname, Firstname         Team2
test

这些换行符来自哪里?我的printf格式不正确吗?

1 个答案:

答案 0 :(得分:3)

在编写shell脚本时,总是引用你的扩展(所有这些,除非你有其他特定的理由!)

printf "%-20s %-25s %-5s %-10s %-20s %s\n" \
       "$hostn" "$kernl" "$uptim" "$owner" "$team" "test"

由于您的$owner可以包含空格,如果您没有正确引用,则姓氏可能会移到$team字段中,否则test会显示为另一个%-20s字段用于下一行的$hostn