2016-04-09 7 views
2

Auch wenn ich die Variable a nicht an pqr() übergebe, bekomme ich a = 10 in pqr(). Meine Frage ist ist Umfang und Sichtbarkeit von a ist das gleiche in pqr() wie die von abc()? Ist dies, weil wir pqr() von Funktion abc() aufrufen? Ich hatte erwartet neue Variable würde innerhalb pqr erstellt werden und wird angezeigt leerer Wert. (Da dies ist, wie variabler Bereich und Sichtbarkeit in modernen Sprachen funktioniert, bin ich neugierig, wie das innerhalb der Bash funktioniert) Ich habe verstanden, dass im obigen Beispiel Wenn ich eine interne pqr() deklariere, wird neue Variable erstellt und daher Anzeige leerer Wert. Danke im Voraus!!!Lokaler variabler Bereich, wenn eine Funktion eine andere innerhalb der Bash-Shell aufruft

+0

"Ist das, weil wir pqr() von Funktion abc() aufrufen?" - Ja :-) –

+0

Das Handbuch für "lokale" Erwähnungen "es macht die Variable NAME haben einen sichtbaren Bereich auf diese Funktion und ihre Kinder beschränkt." –

+0

Die meisten modernen Sprachen sind lexikalisch begrenzt. 'bash' ist jedoch dynamisch beschränkt. – chepner

Antwort

5

Wie in den Kommentaren erwähnt (von man bash):

Wenn local innerhalb einer Funktion verwendet wird, bewirkt, dass die Variablennamen einen sichtbaren Rahmen für diese Funktion und ihre Kinder eingeschränkt haben.

So pqr aus abc Aufruf bedeutet, dass die Variable $a innerhalb beiden Funktionen sichtbar ist.

Es ist erwähnenswert, dass, da Sie Bash-spezifische Funktionen wie local und die nicht-portable function Syntax verwenden, sollten Sie Ihren Shebang zu #!/bin/bash ändern.

Verwandte Themen