我一直覺得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
}
來自bc
POSIX 規範:
它將從給定的任何文件中獲取輸入,然後從標準輸入中讀取。
答案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.