Wie definiert man eine „bc“-Funktion für die spätere Verwendung?

Wie definiert man eine „bc“-Funktion für die spätere Verwendung?

Ich fand es schon immer bcirgendwie geheimnisvoll und faszinierend. Es war eines derDieursprüngliche Unix-Programme. Und es ist eine Programmiersprache für sich. Daher nutze ich gerne jede Gelegenheit, sie zu verwenden. Da es bckeine Fakultätsfunktion zu enthalten scheint, möchte ich eine wie folgt definieren:

define fact(x) {
  if (x>1) {
    return (x * fact(x-1))
  }
  return (1)
}

Aber … ich kann das dann nicht wiederverwenden, oder? Ich möchte in der Lage sein, so etwas zu tun wie

me@home$ bc <<< "1/fact(937)"

Antwort1

Speichern Sie Ihre Funktionsdefinitionen in einer Datei wie factorial.bcund führen Sie dann aus

bc factorial.bc <<< '1/fact(937)'

Wenn Sie möchten, dass die Fakultätsfunktion immer geladen wird, wenn Sie ausführen bc, würde ich vorschlagen, die bcBinärdatei mit einem Shell-Skript oder einer Shell-Funktion zu umschließen (ob ein Skript oder eine Funktion am besten isthängt davon ab, wie Sie es verwenden möchten).

Skript ( bc, einfügen ~/bin)

#!/bin/sh

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

Funktion (zum Einfügen in die Shell-RC-Datei)

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

Von dembcPOSIX-Spezifikationen:

Es übernimmt die Eingabe aus allen angegebenen Dateien und liest sie dann von der Standardeingabe.

Antwort2

Etwas besser als das Schreiben einer Shell-Wrapper-Funktion für bckönnen Sie die Standardargumente für GNU bcin einer Umgebungsvariable angeben. Legen Sie also eine Konfigurationsdatei .bcrcoder etwas Ähnliches in Ihr Home-Verzeichnis und dann

export BC_ENV_ARGS="$HOME/.bcrc "

Von demGNU- bcHandbuch:

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.

verwandte Informationen