echo $(printf ...)删除空格/格式

时间:2014-09-08 19:56:36

标签: bash printf

我使用printf格式化bash中的数字:

$ printf -- ">>%4d\n" 1
>>   1

这很好用,但是当我在子shell中做同样的事情时:

$ echo $(printf -- ">>%4d\n" 1)
>> 1

为什么要删除空格?我完全不知道。

3 个答案:

答案 0 :(得分:3)

子shell没有这样做。不是直接的。

这里的问题是你没有引用子shell结果。因此,shell会对生成的文本进行分词(删除多余的空格),然后将一个单词列表发送回来,然后快乐地将它们吐出来(没有额外的空格)。

这与运行echo 1基本没什么不同,并且想知道额外空格去了哪里。

我的回答here也讨论了这一点。

答案 1 :(得分:2)

确保在使用command substitution时使用引号以获得正确的间距:

echo "$(printf -- ">>%4d\n" 1)"
>>   1

答案 2 :(得分:0)

下面的链接详细说明了在脚本中引用的时间和原因,看看它是否有用。

http://mywiki.wooledge.org/Quotes