我开始使用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:~$
答案 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"