Wie definiere ich eine `bc` Funktion für die spätere Verwendung?

8

Ich fand es immer bcmysteriös und faszinierend. Es war eines der ursprünglichen Unix-Programme. Und es ist eine Programmiersprache für sich. Deshalb nutze ich gerne jede Gelegenheit, um es zu nutzen.

Da bc keine 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 ... das kann ich dann nicht wiederverwenden, oder?

Ich möchte in der Lage sein, so etwas zu tun

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

Antworten:

11

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

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

Wenn Sie möchten, dass die Fakultätsfunktion beim Ausführen immer geladen wird bc, empfehlen wir Ihnen , die bcBinärdatei mit einem Shell-Skript oder einer Shell-Funktion zu versehen ( ob ein Skript oder eine Funktion am besten geeignet ist, hängt davon ab, wie Sie sie verwenden möchten).

Skript ( bczum Einfügen ~/bin)

#!/bin/sh

bc ~/factorial.bc << EOF
$@
EOF

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

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

Aus den bcPOSIX-Spezifikationen :

Es muss Eingaben von allen angegebenen Dateien entgegennehmen und dann von der Standardeingabe lesen.

jw013
quelle
Vielleicht können Sie die Datei .bcrc aufrufen? Können Sie mehrere Definitionen in dieselbe Datei einfügen?
Bernhard
Ja, Sie können jede gültige bc-Syntax in die Datei einfügen. Wie Sie die Datei nennen und wo Sie sie ablegen, liegt ganz bei Ihnen.
jw013