保存到变量时如何在printf中保持宽度格式?

-1 bash shell-script

我有以下代码

printf "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"
Run Code Online (Sandbox Code Playgroud)

这产生了预期的输出

   24756.22971
    9910.13045
    7701.30924
   22972.27622
Run Code Online (Sandbox Code Playgroud)

我想用变量中的前导空格保存此输出,以供以后使用

printf -v output "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试打印/回显变量 $output,前导空格就会消失:

24756.22971
9910.13045
7701.30924
22972.27622
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

我猜你正在使用变量 output未加引号,如

printf '%s\n' $output
Run Code Online (Sandbox Code Playgroud)

这将使 shell 在空格(默认为空格、制表符和换行符)上拆分变量中的字符串,即它会删除前导缩进。你仍然会得到四行输出,只是因为格式字符串printf每个单词被重用。

echo $output,您将在一行中获取数据,因为这就是echo它的作用,它输出每个参数(字符串中的拆分词),它们之间有空格。

相反,请确保您是双引号的扩展$output

printf '%s' "$output"
Run Code Online (Sandbox Code Playgroud)

(我不是放 \n在此处的格式字符串中,因为这会在字符串的末尾输出一个空行,因为它已经以换行符结尾)。

也可以看看: