1
    #!/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

Output:

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

As you can see here the statements "Value of PI is" and "Time calculated is" are displayed on each line. Please help!

KamilCuk
  • 120,984
  • 8
  • 59
  • 111
TKr
  • 11
  • 1

1 Answers1

0

Please, put double quotes around $var and $my_time, really usefull when variables contain line feed (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

If you want a bc result on only one line, add BC_LINE_LENGTH=0 before:

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

(tested with bc 1.07.1)

Arnaud Valmary
  • 2,039
  • 9
  • 14