Ich bin neu bei Bash. Ich bin verwirrt über die Art und Weise, wie Funktionen in dieser Sprache funktionieren.
Ich habe diesen Code geschrieben:
#!/usr/bin/env sh
choice_func() {
echo "$choice"
}
echo "Enter your choice:"
read choice
choice_func
Beim Untersuchen meines Codes ist mir aufgefallen, dass ich vergessen habe, choice
beim Aufruf den Wert von als Eingabe zu senden choice_func()
. Aber es funktioniert einwandfrei! Wie ist es möglich, dass die Funktion die Eingabe nicht erhalten hat, aber kann echo
das so sein?
Antwort1
choice
Im Hauptteil des Skripts lesen Sie einen Wert in die Variable ein . Diese Variable hat einen globalen Gültigkeitsbereich (in Ermangelung eines besseren Wortes), was bedeutet, dass sie auch innerhalb der Funktion sichtbar sein wird.
Beachten Sie, dass die Variable, wenn Sie den Wert innerhalb der Funktion lesen würden, immer noch globalen Gültigkeitsbereich hätte und außerhalb der Funktion sichtbar wäre (nach dem Funktionsaufruf). Dies wäre der Fall, sofern Sie sie nicht innerhalb der Funktion als local
with deklariert hätten local choice
.
Weitere Informationen zum Gültigkeitsbereich von Shellvariablen finden Sie beispielsweise unter
Um den Wert in der Variablen choice
an die Funktion zu übergeben, verwenden Sie
choice_func "$choice"
Die Funktion kann dann auf diesen Wert in $1
ihrem ersten Positionsparameter zugreifen:
choice_func () {
echo "$1"
}
oder
choice_func () {
local choice="$1"
# choice is now local and separate from the variable
# with the same name in the main script.
echo "$choice"
}
Dies ist die richtige Art und Weise, einen Wert an eine Funktion zu übergeben, ohnesich verlassendfür globale Variablen in einem Shell-Skript.
Antwort2
Weil Sie Ihre Funktion so entworfen haben, dass kein Argument erforderlich ist, das ist alles.