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 스케일이 적용됩니다.
그러나 계산기에서 모든 작업을 수행하는 것이 더 간단하고 아마도 더 정확할 것입니다. var1
둘 var2
다 Bash 및 POSIX sh의 정수 나누기와 동일한 결과를 갖습니다.
var3=`bc <<< "scale = 2 ; $diff / 60 / 57"`
그러면 적절한 반올림을 통해 수학적으로 정확한 답이 제공됩니다. 어떤 이유로 정수 동작과 스케일링이 필요한 경우 bc
사용할 수 있는 다른 버전이 있습니다 .
답변4
bc 계산이 약간 복잡하다면 HERE 문서를 사용하여 더 읽기 쉽게 만들 수도 있습니다.
var2=500
bc << EOF
scale=2
$var2 + 100
EOF
인쇄해 보세요
600