1

我的 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 格式不正确吗?

4

1 回答 1

3

在编写 shell 脚本时,请始终引用您的扩展(全部引用,除非您有特定的理由不这样做!):

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

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

于 2013-03-12T14:51:26.570 回答