我的printf语句被打印在2行上,一个在另一个下面,因为我的程序的输出是多行,但我希望它只打印一次


#!/bin/bash
for n in 1 2;
do var=$(bc -l <<< 'scale=100; 4*a(1)')
my_time=$( (time bc -l <<< 'scale=100; 4*a(1)') 2>&1 >/dev/null)
echo $var
echo $my_time       
printf "Value of PI is :%sn" $var
printf "Time calculated is :%sn" $my_time
done

输出:

real 0m0.005s user 0m0.004s sys 0m0.000s
Value of PI is :3.141592653589793238462643383279502884197169399375105820974944592307
Value of PI is :8164062862089986280348253421170676
Time calculated is :real
Time calculated is :0m0.005s
Time calculated is :user
Time calculated is :0m0.004s
Time calculated is :sys
Time calculated is :0m0.000s
3.141592653589793238462643383279502884197169399375105820974944592307 8164062862089986280348253421170676
real 0m0.004s user 0m0.000s sys 0m0.000s
Value of PI is :3.141592653589793238462643383279502884197169399375105820974944592307
Value of PI is :8164062862089986280348253421170676
Time calculated is :real
Time calculated is :0m0.004s
Time calculated is :user
Time calculated is :0m0.000s
Time calculated is :sys
Time calculated is :0m0.000s

正如你在这里看到的语句&;Value of PI is&;计算时间为;显示在每行上。请帮助!

请在$var$my_time周围加上双引号,当变量包含换行(LF即n)时非常有用。

#!/bin/bash
for n in 1 2; do
var=$(bc -l <<< 'scale=100; 4*a(1)')
my_time=$( (time bc -l <<< 'scale=100; 4*a(1)') 2>&1 >/dev/null)
echo $var
echo $my_time       
printf "Value of PI is :%sn" "$var"
printf "Time calculated is :%sn" "$my_time"
done

如果您只想在一行上得到bc结果,请在前面添加BC_LINE_LENGTH=0:

BC_LINE_LENGTH=0 bc -l <<< 'scale=100; 4*a(1)'

(用BC 1.07.1测试)

最新更新