나는 항상 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
}
로부터bc
POSIX 사양:
주어진 파일에서 입력을 받은 다음 표준 입력에서 읽습니다.
답변2
에 대한 쉘 래퍼 함수를 작성하는 것보다 약간 더 나은 점은 환경 변수에서 bc
GNU에 대한 기본 인수를 지정할 수 있다는 것입니다 . 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.