输出shell变量时如何保留空格?

glu*_*uke 1 string bash whitespace substitution

为了进行字符串匹配,我需要使用前导空格定义bash变量。我需要从整数开始定义它,例如:

jj=5
Run Code Online (Sandbox Code Playgroud)

在我看来,printf是个好主意,因此,如果我想填充最多6个字符的空格:

jpat=`printf "  %6i"  $jj`
Run Code Online (Sandbox Code Playgroud)

但不幸的是,当我尝试调用该变量时:

echo $jpat
Run Code Online (Sandbox Code Playgroud)

前导空格被删除,我只得到$jj原样的整数。

有什么办法可以保留这样的空间?

(这等效于:v=' val'; echo $v$v。为什么输出中没有开头和多个空格?)

l0b*_*0b0 5

使用更多报价! echo "$jpat"会做你想要的。

您在执行的操作还有另一个问题:命令替换将删除尾随的换行符。这在printf您使用的命令中不是问题,但是例如分配jpat=$(printf " %6i\n" "$jj")将为您提供与命令完全相同的结果。