关于bash:echo $(printf …)删除空格/格式

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会对生成的文本进行分词(删除无关的空格),然后将一个单词列表交给回声,然后快乐地将它们吐出来(没有额外的空格)。

这与运行echo 1基本没什么不同,并且想知道多余的空间去了哪里。

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


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

1
2
3
echo"$(printf --">>%4d
" 1)"
>>   1


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

http://mywiki.wooledge.org/Quotes