어쨌든 변수를 bc에 전달하고 실행할 명령이 있습니까?

어쨌든 변수를 bc에 전달하고 실행할 명령이 있습니까?

bc부동 소수점 출력을 얻으 려면 특정 변수를 전달해야 합니다 .

var1=$((<some operation>))
var2=$((<some operation>))      #Needs var1
var3=$((<some operation>))      #Needs var2
bc -l <<< $var3                 #Need output in Floating points

산출:

(standard_in) 1: illegal character: $

어쨌든 이것을 극복할 방법이 있나요?

고쳐 쓰다:

diff=$(($epoc2-$epoc1))
var1=$(($diff / 60))
var2=$(($var1 / 57))
var3=`bc <<< 'scale=2; $var2'`

답변1

$간단한 따옴표는 변수를 확장하지 않습니다 . 큰따옴표를 사용해야 합니다.

var3=`bc <<< "scale=2; $var2"`

$var1반면 에 부동 소수점 은 $var2저장되지 않으므로( bash관리되지 않음) 대신 bc그렇게 합니다.

diff=$(($epoc2-$epoc1))
var1=$(bc <<< "scale=3 ; $diff / 60")
var2=$(bc <<< "scale=3 ; $var1 / 57")
var3=$(bc <<< "scale=2; $var2")

답변2

단일 틱으로 인해 표현식이 확장되지 않습니다 '.

다음과 같은 것을 사용하십시오:

var3=$(bc <<< "scale=2; $var2")

답변3

이 오류 메시지는 입력 내용에 문자 그대로의 달러 기호가 있음을 의미합니다 bc. 껍질에서,아포스트로피각 문자의 리터럴 값을 유지합니다. 사용큰따옴표변수 삽입:

bc <<< "scale=2; $var2"

bc그러나 입력 값은 일반적으로 잘리거나 채워지지 않으므로 원하는 출력을 얻지 못할 수 있습니다 . 무작동 분할을 사용하여 속일 수 있습니다.

bc <<< "scale=2; $var2 / 1"

그러면 출력에 2dp 스케일이 적용됩니다.


그러나 계산기에서 모든 작업을 수행하는 것이 더 간단하고 아마도 더 정확할 것입니다. var1var2다 Bash 및 POSIX sh의 정수 나누기와 동일한 결과를 갖습니다.

var3=`bc <<< "scale = 2 ; $diff / 60 / 57"`

그러면 적절한 반올림을 통해 수학적으로 정확한 답이 제공됩니다. 어떤 이유로 정수 동작과 스케일링이 필요한 경우 bc사용할 수 있는 다른 버전이 있습니다 .

답변4

bc 계산이 약간 복잡하다면 HERE 문서를 사용하여 더 읽기 쉽게 만들 수도 있습니다.

var2=500
bc << EOF
scale=2
$var2 + 100
EOF

인쇄해 보세요

600

관련 정보