bash 함수를 사용하여 명령 행에서 간단한 수학 수행 : $ 1을 $ 2로 나눈 값 (bc 사용) 있습니다. 이것을 위해 bash 함수를 정의

때로는 한 숫자를 다른 숫자로 나눌 필요가 있습니다. 이것을 위해 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}'; }