echo $(printf …) dropping whitespace/formatting
我使用printf格式化bash中的数字:
1 2 3 | $ printf --">>%4d " 1 >> 1 |
这工作正常,但是当我在子shell中执行相同的操作时:
1 2 3 | $ echo $(printf --">>%4d " 1) >> 1 |
为什么要删除空格? 我完全不知道。
子shell没有这样做。 不是直接的。
这里的问题是你没有引用子shell结果。 因此,shell会对生成的文本进行分词(删除无关的空格),然后将一个单词列表交给回声,然后快乐地将它们吐出来(没有额外的空格)。
这与运行
我在这里的回答也讨论了这一点。
使用
1 2 3 | echo"$(printf --">>%4d " 1)" >> 1 |
下面的链接详细说明了在脚本中引用的时间和原因,看看它是否有用。
http://mywiki.wooledge.org/Quotes