【问题标题】:My printf statement is getting printed on 2 lines one below the other as the output of my program is multiline, but I want it to print just once [duplicate]我的 printf 语句被打印在 2 行上,因为我的程序的输出是多行的,但我希望它只打印一次 [重复]
【发布时间】:2021-09-06 06:37:00
【问题描述】:
    #!/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 :%s\n" $var
    printf "Time calculated is :%s\n" $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

正如您在此处看到的,“PI 的值是”和“计算的时间是”语句显示在每一行上。请帮忙!

【问题讨论】:

标签: linux bash shell sh


【解决方案1】:

请在$var$my_time 周围加上双引号,这在变量包含换行符时非常有用(LF aka \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 :%s\n" "$var"
    printf "Time calculated is :%s\n" "$my_time"
done

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

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

(使用 bc 1.07.1 测试)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    相关资源
    最近更新 更多