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

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

我有以下代码

printf "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"

这会产生预期的输出

   24756.22971
    9910.13045
    7701.30924
   22972.27622

我想将此输出与前导空格保存在变量中以供以后使用,如下所示

printf -v output "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"

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

24756.22971
9910.13045
7701.30924
22972.27622

答案1

我猜您正在使用不带引号的变量output,如

printf '%s\n' $output

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

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

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

printf '%s' "$output"

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

也可以看看:

相关内容