後で使用するために `bc`関数を定義する方法は?

後で使用するために `bc`関数を定義する方法は?

私はいつも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
}

~からbcPOSIX仕様:

指定されたファイルから入力を受け取り、標準入力から読み込みます。

答え2

シェルラッパー関数を作成するよりも少し優れているのは、環境変数にbcGNUのデフォルトパラメータを指定できることです。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.

関連情報