如何定義一個`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使用 shell 腳本或函數包裝二進位(腳本還是函數最好取決於您想如何使用它)。

腳本 ( bc, 放入~/bin)

#!/bin/sh

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

函數(放入shell rc檔案中)

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

來自bcPOSIX 規範

它將從給定的任何文件中獲取輸入,然後從標準輸入中讀取。

答案2

比為 編寫 shell 包裝函數稍好一些,您可以在環境變數中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.

相關內容