Я всегда находил bc
это загадочным и интригующим. Это был один изtheоригинальные программы 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
}
Он будет принимать входные данные из любых указанных файлов, а затем считывать их из стандартного ввода.
решение2
Немного лучше, чем писать функцию оболочки оболочки для bc
, вы можете указать аргументы по умолчанию для GNU bc
в переменной окружения. Так что поместите файл конфигурации .bcrc
или что-то еще в свой домашний каталог, а затем
export BC_ENV_ARGS="$HOME/.bcrc "
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.