Die Funktion kann den Wert wiedergeben, der nicht als Eingabe empfangen wurde

Die Funktion kann den Wert wiedergeben, der nicht als Eingabe empfangen wurde

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, choicebeim 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 echodas so sein?

Antwort1

choiceIm 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 localwith deklariert hätten local choice.

Weitere Informationen zum Gültigkeitsbereich von Shellvariablen finden Sie beispielsweise unter

Um den Wert in der Variablen choicean die Funktion zu übergeben, verwenden Sie

choice_func "$choice"

Die Funktion kann dann auf diesen Wert in $1ihrem 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.

verwandte Informationen