I was using printf to format a number in bash:
$ printf -- ">>%4d\n" 1
>> 1
This works fine, but when i do the same thing in a subshell:
$ echo $(printf -- ">>%4d\n" 1)
>> 1
Why are the spaces removed? I have absolutely no idea.
I was using printf to format a number in bash:
$ printf -- ">>%4d\n" 1
>> 1
This works fine, but when i do the same thing in a subshell:
$ echo $(printf -- ">>%4d\n" 1)
>> 1
Why are the spaces removed? I have absolutely no idea.
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.
Make sure to use quotes while using command substitution
to get spacing right:
echo "$(printf -- ">>%4d\n" 1)"
>> 1
Below is the link which gives a detailed description when and why one should quote in their scripts, take a look it will be useful.