我有以下代码
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
在此处放入格式字符串,因为这会在字符串末尾输出一个空行,因为它已经以换行符结尾)。
也可以看看: