This question already has an answer here:
For string matching purposes I need to define a bash variable with leading spaces. I need to define this starting from an integer, like:
jj=5
printf seems to me a good idea, so if I want to fill spaces up to 6 character:
jpat=`printf " %6i" $jj`
but unluckly when I am trying to recall the variable:
echo $jpat
the leading whitespaces are removed and I only get the $jj
integer as it was.
Any solution to keep such spaces?
(This is equivalent to this: v=' val'; echo $v$v
. Why aren't there leading and multiple spaces in output?)
Use More Quotes!
echo "$jpat"
will do what you want.There is another issue with what you're doing: Command substitutions will remove trailing newlines. It's not an issue in the
printf
command you're using, but for example assigningjpat=$(printf " %6i\n" "$jj")
would give you exactly the same result as your command.