나중에 사용하기 위해 `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.

관련 정보