Ich versuche zu suchen, wie Parameter in einer Bash-Funktion übergeben werden, aber es wird immer angezeigt, wie Parameter über die Befehlszeile übergeben werden.
Ich möchte Parameter in meinem Skript übergeben. Ich habe es versucht:
myBackupFunction("..", "...", "xx")
function myBackupFunction($directory, $options, $rootPassword) {
...
}
Aber die Syntax ist nicht korrekt. Wie übergebe ich einen Parameter an meine Funktion?
bash
parameters
arguments
stivlo
quelle
quelle
Antworten:
Es gibt zwei typische Möglichkeiten, eine Funktion zu deklarieren. Ich bevorzuge den zweiten Ansatz.
oder
So rufen Sie eine Funktion mit Argumenten auf:
Die Funktion bezieht sich auf übergebene Argumente nach ihrer Position (nicht nach Namen), dh $ 1, $ 2 usw. $ 0 ist der Name des Skripts.
Beispiel:
Außerdem müssen Sie Ihre Funktion aufrufen, nachdem sie deklariert wurde.
Ausgabe:
Referenz: Advanced Bash-Scripting Guide .
quelle
function name() {}
. Vielleicht mit einem 'Enter' vor{}
function
Schlüsselworts und des()
. Mein Ziel (in einer Datei, nicht in der Befehlszeile) ist es, die Übersichtlichkeit zu erhöhen und nicht die Anzahl der eingegebenen Zeichen zu verringernfunction myBackupFunction() compound-statement
.function
Keyword-Version ist eine Erweiterung; Die andere Form funktioniert in allen POSIX-kompatiblen Shells.function
Schlüsselwort Garantien in den alten Shells der ksh-Familie, die es einführten, dass moderne Bash nicht ehren (in solchen Shells wurdenfunction
Variablen standardmäßig lokal gemacht; in Bash , Es tut nicht). Daher verringert seine Verwendung die Klarheit für jeden, der das ksh-Verhalten kennt und erwarten könnte. Siehe wiki.bash-hackers.org/scripting/obsoleteKenntnisse in Programmiersprachen auf hoher Ebene (C / C ++ / Java / PHP / Python / Perl ...) legen dem Laien nahe, dass Bash-Funktionen wie in diesen anderen Sprachen funktionieren sollten. Stattdessen funktionieren Bash-Funktionen wie Shell-Befehle und erwarten, dass Argumente an sie übergeben werden, so wie man eine Option an einen Shell-Befehl übergeben könnte (z
ls -l
. B. ). Effektiv Funktionsargumente in bash behandelt werden als Positionsparameter ($1, $2..$9, ${10}, ${11}
und so weiter). Dies ist keine Überraschung, wenn man bedenkt, wie esgetopts
funktioniert. Verwenden Sie keine Klammern, um eine Funktion in bash aufzurufen.( Hinweis : Ich arbeite gerade an Open Solaris.)
Möchten Sie Namen für Variablen verwenden. Mach das einfach.
Möchten Sie ein Array an eine Funktion übergeben?
Behandeln Sie die Argumente innerhalb der Funktion wie folgt.
Müssen Sie einen Wert und ein Array übergeben, aber trotzdem "$ @" in der Funktion verwenden?
quelle
Wenn Sie benannte Parameter bevorzugen, ist es möglich (mit ein paar Tricks), benannte Parameter tatsächlich an Funktionen zu übergeben (ermöglicht auch das Übergeben von Arrays und Referenzen).
Mit der von mir entwickelten Methode können Sie benannte Parameter definieren, die an eine Funktion wie die folgende übergeben werden:
Sie können Argumente auch als @required oder @readonly mit Anmerkungen versehen, ... rest-Argumente erstellen, Arrays aus sequentiellen Argumenten erstellen (z. B.
string[4]
) und die Argumente optional in mehreren Zeilen auflisten :Mit anderen Worten, Sie können Ihre Parameter nicht nur bei ihren Namen aufrufen (was einen besser lesbaren Kern ausmacht), sondern auch Arrays übergeben (und Verweise auf Variablen - diese Funktion funktioniert jedoch nur in Bash 4.3)! Außerdem befinden sich die zugeordneten Variablen alle im lokalen Bereich, genau wie $ 1 (und andere).
Der Code, mit dem dies funktioniert, ist ziemlich leicht und funktioniert sowohl in Bash 3 als auch in Bash 4 (dies sind die einzigen Versionen, mit denen ich es getestet habe). Wenn Sie an weiteren Tricks wie diesen interessiert sind, die das Entwickeln mit Bash viel schöner und einfacher machen, können Sie sich mein Bash Infinity Framework ansehen. Der folgende Code ist als eine seiner Funktionen verfügbar.
quelle
@var
,@reference
,@params
Variablen? Was sollte ich im Internet nachschlagen, um mehr darüber zu erfahren?ucommon
und meinem Code. Möglicherweise haben Sie ein Tool installiert, das das von Ihnen erwähnte Problem verursacht. Sie wissen nicht, woran es liegen könnte.Verpassen Sie die Parens und Kommas:
und die Funktion sollte so aussehen:
quelle
Ich hoffe, dieses Beispiel kann Ihnen helfen. Der Benutzer nimmt zwei Zahlen entgegen, gibt sie an die aufgerufene Funktion
add
(in der allerletzten Zeile des Codes) weiter undadd
fasst sie zusammen und druckt sie aus.quelle
Ein einfaches Beispiel, das sowohl beim Ausführen eines Skripts als auch innerhalb des Skripts beim Aufrufen einer Funktion gelöscht wird.
quelle
Ich dachte, ich würde mich mit der Erwähnung einer anderen Möglichkeit befassen, benannte Parameter an bash zu übergeben ... als Referenz übergeben. Dies wird ab Bash 4.0 unterstützt
Eine alternative Syntax für Bash 4.3 ist die Verwendung eines Namens
Obwohl das nameref viel praktischer ist, da es nahtlos dereferenziert, liefern einige ältere unterstützte Distributionen immer noch eine ältere Version, so dass ich es noch nicht ganz empfehlen werde.
quelle