Bash%s格式说明符消除了打印输出时字符串中的空格

时间:2015-01-08 14:47:08

标签: bash printf string-formatting

我开始使用printf代替echo。我第一次进入printf %s就是这样:

#!/bin/bash
danny=$(tail -1 /come/and/play/with/US.log| ~/walt/convert_gm_est)
printf "%s" $danny
08:02.020ZINFO<-casper/casperbox001wowSYSSTATS[sz=21,tag=0,aux=0]process_log2221397800

它消除了字符串中的所有空格。所以我在格式说明符后添加了一个空格。字符串看起来更好用空格加上我可以很容易地用awk消除时间。我不会在互联网上看到任何关于此的内容。我尝试了"%s\s",但是没有用。这是使用格式说明符的标准过程 - 在%s之后使用空格吗?这是这样做的方式还是我错过了什么?

#!/bin/bash
danny=$(tail -1 /come/and/play/with/US.log| ~/walt/convert_gm_est)
printf "%s " $danny
08:02.020Z INFO <- casper/casperbox001wow SYSSTATS[sz=21, tag=0, aux=0] process_log 2221397 80 0 casper@casperbox001wow:~$

1 个答案:

答案 0 :(得分:6)

当shell评估时:

printf "%s" $danny

shell会扩展变量danny的值,然后将其拆分为单词。它也将用这些词扩大整体。完成后,表达式将如下所示(为了澄清而添加了引号):

printf '%s' '08:02.020Z' 'INFO' '<-' 'casper/casperbox001' 'wow0' 'SYSSTATS'...

printf重复其格式字符串,直到消耗掉所有参数。因此,使用格式字符串%s会导致参数连接而不会插入空格。

您可能想引用$danny,以便将其作为printf的单个参数显示:

printf "%s" "$danny"