私はいつも、bc
神秘的で興味深いと感じていました。のオリジナルの Unix プログラムです。そして、それ自体がプログラミング言語です。ですから、私は喜んでそれを使う機会を見つけます。 には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 "
からGNUbc
マニュアル:
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.