나중에 사용하기 위해 `bc` 함수를 정의하는 방법은 무엇입니까?

나중에 사용하기 위해 `bc` 함수를 정의하는 방법은 무엇입니까?

나는 항상 bc그것이 다소 신비롭고 흥미롭다고 생각했습니다. 이게 그 중 하나야이것원래 유닉스 프로그램. 그것은 그 자체로 프로그래밍 언어입니다. 그래서 나는 그것을 사용할 기회를 갖게 되어 기쁩니다. bc계승 함수가 포함되지 않은 것 같아서 다음과 같이 정의하고 싶습니다 .

define fact(x) {
  if (x>1) {
    return (x * fact(x-1))
  }
  return (1)
}

하지만... 재사용할 수는 없겠죠? 나는 다음과 같은 일을 할 수 있기를 원합니다.

me@home$ bc <<< "1/fact(937)"

답변1

이와 같은 파일에 함수 정의를 저장 factorial.bc하고 실행하십시오.

bc factorial.bc <<< '1/fact(937)'

bc계승 함수가 런타임 시 항상 로드 되도록 하려면 bc쉘 스크립트나 함수 래퍼 바이너리(스크립트나 함수가 가장 좋나요?어떻게 사용하시느냐에 따라 다릅니다.)

스크립트( bc, 넣다 ~/bin)

#!/bin/sh

/usr/bin/bc ~/factorial.bc << EOF
$*
EOF

기능(쉘 rc 파일에 넣기)

bc () {
    command bc ~/factorial.bc << EOF
$*
EOF
}

~에서bcPOSIX 사양:

주어진 파일에서 입력을 받은 다음 표준 입력에서 읽습니다.

답변2

쉘 래퍼 함수를 ​​작성하는 것보다 조금 더 나은 점은 환경 변수에 bcGNU의 기본 매개변수를 지정할 수 있다는 것입니다. bc따라서 구성 파일 .bcrc이나 다른 것을 홈 디렉토리에 넣은 다음

export BC_ENV_ARGS="$HOME/.bcrc "

~에서GNU bc매뉴얼:

BC_ENV_ARGS  
    This is another mechanism to get arguments to bc. The format is the same
    as the command line arguments. These arguments are processed first, so
    any files listed in the environment arguments are processed before any
    command line argument files. This allows the user to set up "standard"
    options and files to be processed at every invocation of bc. The files
    in the environment variables would typically contain function
    definitions for functions the user wants defined every time bc is run.

관련 정보