Bash %s 格式说明符在打印输出时消除了字符串中的空格
Bash %s format specifier eliminates spaces in string on print out
我开始使用 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
它消除了字符串中所有的space。所以我在格式说明符后面加了一个space。 spaces 的字符串看起来更好,而且我可以很容易地用 awk 节省时间。我在互联网上没有看到任何关于此的信息。我尝试了 "%s\s"
但没有用。这是使用格式说明符的标准程序 - 在 %s
之后使用 space 吗?这是这样做的方法还是我遗漏了什么?
#!/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:~$
当 shell 计算时:
printf "%s" $danny
shell 会扩展变量 danny
的值,然后将其拆分为单词。它还将扩展这些词中的 glob。完成后,表达式将如下所示(为澄清添加引号):
printf '%s' '08:02.020Z' 'INFO' '<-' 'casper/casperbox001' 'wow0' 'SYSSTATS'...
printf
重复其格式字符串,直到使用完所有参数。因此,使用格式字符串 %s
会导致在没有中间空格的情况下连接参数。
您可能打算引用 $danny
以便它作为 printf 的单个参数显示:
printf "%s" "$danny"
我开始使用 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
它消除了字符串中所有的space。所以我在格式说明符后面加了一个space。 spaces 的字符串看起来更好,而且我可以很容易地用 awk 节省时间。我在互联网上没有看到任何关于此的信息。我尝试了 "%s\s"
但没有用。这是使用格式说明符的标准程序 - 在 %s
之后使用 space 吗?这是这样做的方法还是我遗漏了什么?
#!/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:~$
当 shell 计算时:
printf "%s" $danny
shell 会扩展变量 danny
的值,然后将其拆分为单词。它还将扩展这些词中的 glob。完成后,表达式将如下所示(为澄清添加引号):
printf '%s' '08:02.020Z' 'INFO' '<-' 'casper/casperbox001' 'wow0' 'SYSSTATS'...
printf
重复其格式字符串,直到使用完所有参数。因此,使用格式字符串 %s
会导致在没有中间空格的情况下连接参数。
您可能打算引用 $danny
以便它作为 printf 的单个参数显示:
printf "%s" "$danny"