Siempre me ha parecido bc
algo misterioso e intrigante. Fue uno deelProgramas Unix originales. Y es un lenguaje de programación en sí mismo. Así que con mucho gusto aprovecho cualquier oportunidad que pueda encontrar para usarlo. Como bc
no parece incluir una función factorial, quiero definir una así:
define fact(x) {
if (x>1) {
return (x * fact(x-1))
}
return (1)
}
Pero... entonces no puedo reutilizar eso, ¿verdad? Me gustaría poder hacer algo como
me@home$ bc <<< "1/fact(937)"
Respuesta1
Guarde las definiciones de sus funciones en un archivo como factorial.bc
y luego ejecute
bc factorial.bc <<< '1/fact(937)'
Si desea que la función factorial se cargue siempre cuando ejecuta bc
, le sugiero envolver el bc
binario con un script o función de shell (si un script o una función es mejordepende de cómo quieras usarlo).
Guión ( bc
, para poner ~/bin
)
#!/bin/sh
/usr/bin/bc ~/factorial.bc << EOF
$*
EOF
Función (para poner en el archivo rc de shell)
bc () {
command bc ~/factorial.bc << EOF
$*
EOF
}
Desde elbc
Especificaciones POSIX:
Tomará información de cualquier archivo proporcionado y luego leerá de la entrada estándar.
Respuesta2
Ligeramente mejor que escribir una función contenedora de shell para bc
, puede especificar los argumentos predeterminados de GNU bc
en una variable de entorno. Así que coloque un archivo de configuración .bcrc
o algo así en su directorio de inicio y luego
export BC_ENV_ARGS="$HOME/.bcrc "
Desde elbc
manual de ÑU:
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.