Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.8k views
in Technique[技术] by (71.8m points)

bash - echo $(printf ...) dropping whitespace/formatting

I was using printf to format a number in bash:

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

This works fine, but when i do the same thing in a subshell:

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

Why are the spaces removed? I have absolutely no idea.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The sub-shell isn't doing it. Not directly.

The issue here is that you aren't quoting the sub-shell result. As such the shell is word-splitting the resulting text (which drops extraneous spaces) and then hands a list of words to echo which happily spits them back out at you (without the extra spaces).

This is essentially no different than running echo 1 and wondering where the extra spaces went.

My answer here discusses this a bit as well.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...