-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)
我猜你正在使用变量 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在此处的格式字符串中,因为这会在字符串的末尾输出一个空行,因为它已经以换行符结尾)。
也可以看看: