2017-03-18 2 views
0

Ich arbeite in Ubuntu Shell, aber ich will es auch für UNIX arbeiten.
Hier ist mein Code:Umfang der Variablen in Funktion in Unix

#!/bin/bash 

func() 
{ 
    x=42 
} 

x=9 
func 
echo $x 
  • Warum globale x-42 geändert wird, wenn ich nur lokale Variable x
  • Ist in Unix für variable Bereiche unterschiedliche Regel geändert?
  • Gibt es eine Methode, um den Rückgabewert von func zur globalen Variable zu setzen, die später im Code verwendet werden kann?

Vielen Dank!

+0

local/declare sind die Optionen zu untersuchen – grail

+0

Die Antwort auf die meisten grundlegenden Bash-Fragen finden Sie in der Anleitung: https://tiswww.case.edu/php/chet/bash/bashref.html – ccarton

Antwort

0

Zuerst programmieren Sie nicht Linux; Sie schreiben tatsächlich eine Funktion für das Shell-Programm bash. Geben Sie info bash in der Befehlszeile ein, um Dokumentation dafür zu erhalten. Für jede Version von Unix hängt das, was in der Befehlszeile passiert, davon ab, welche Art von Shell Sie ausführen (es gibt viele; bash ist die Standardeinstellung für die meisten Linux-Systeme).

Variablen in einer Funktion, die nicht deklariert sind, sind standardmäßig global. Wie im Kommentar angegeben, können Sie local verwenden, um die Variable als lokal für die Funktion zu markieren.

+0

Vielen Dank! Und über diesen Rückgabewert, gibt es eine Methode? Etwas mit ähnlich wie 'var = $ (Spaß)' – SevO

+0

Es ist ein bisschen seltsam. Sie können das Ergebnis drucken und dann das Ergebnis in eine Variable aufnehmen: '$ func() {local x; x = "fred"; echo $ x; }; $ wilma = $ (func); $ echo $ wilma ', das" fred "druckt –

+0

Oder Sie können eine Ganzzahl als Fehlercode zurückgeben:' $ func() {return 42}; Funk; ERR = $ ?; echo $ ERR', die 42 druckt. (Beachten Sie, dass es zwischen der Rückgabeanweisung und dem '}' einen Zeilenumbruch geben muss, den ich nicht in einen Kommentar einfügen kann. –