때로는 한 숫자를 다른 숫자로 나눌 필요가 있습니다. 이것을 위해 bash 함수를 정의 할 수 있다면 좋을 것입니다. 지금까지는 다음과 같은 표현식을 사용해야합니다.
echo 'scale=25;65320/670' | bc
그러나 다음과 같은 .bashrc 함수를 정의 할 수 있다면 좋을 것입니다.
divide () {
bc -d $1 / $2
}
답변
편리한 bash 함수가 있습니다 calc
.
calc () {
bc -l <<< "$@"
}
사용법 예 :
$ calc 65320/670
97.49253731343283582089
$ calc 65320*670
43764400
자신에게 맞게 이것을 변경할 수 있습니다. 예를 들면 다음과 같습니다.
divide() {
bc -l <<< "$1/$2"
}
참고 : <<<
A는 여기 문자열 의 표준 입력으로 공급된다 bc
. 를 호출 할 필요는 없습니다 echo
.
답변
배쉬는 수학 자체를 어느 정도 할 수 있습니다. 그러나 반올림하므로 정확도에는 유용하지 않습니다.
[user]$ echo $(( 10/5 ))
2
bash 함수는 간단한 지름길이며 예제는 기본적으로 작동합니다.
divide() {
echo "scale=25;$1/$2" | bc
}
그것을 .bashrc에 던지면 다음을 수행 할 수 있습니다.
[user]$ divide 10 5
2.0000000000000000000000000
답변
bash 내장 ‘expr’을 알고있을 것입니다.
$ expr 60 / 5
12
정수로 제한되며 인수 사이에 공백이 필요합니다.
이미 사용중인 에코 표현식의 선을 따라 함수를 정의하지 못하게하는 것은 무엇입니까? 즉
divide () {
echo $1/$2 | bc
}
답변
실제로이 정확한 질문에 대한 답은 아니지만 아는 것이 좋습니다. zsh
😉 사용
% echo $((65320./670))
97.492537313432834
답변
이 경우 calc
시스템에 설치하고 반올림 좋아하지 않아, 당신은 할 수 있습니다 :
div() { calc "$1 / $2"; }
답변
bc를 사용하지 않고 작은 값과 제한된 정밀도에 대한 더러운 핵은 정확한 결과를 얻기 위해 나누기 전에 지명자를 곱하는 것입니다.
정밀도없는 예 :
echo $((13/7))
1
그리고 두 자리 정밀도로 : 100을 곱하고 소수점을 2 단계 왼쪽으로 이동하십시오.
echo $((100*13/7)) | sed 's/..$/.&/'
1.85
echo $((100*13/7))%
185%
이것은 숫자의 범위가 이전에 알려져 있고 정밀도가 항상 동일한 경우에만 유용합니다. bc 를 호출 하지 않고 sed를 호출하는 것은 그리 합리적이지 않은 것 같습니다.
값을 곱하면 오버플로 오류가 발생할 수 있지만 매우 빠르지는 않습니다.
echo $((1000000000*12345678901))
-6101065172709551616
답변
bc를 사용하는 대신 awk를 사용할 수 있습니다.
div() { awk -v p=$1 -v q=$2 'BEGIN{print p/q}'; }