• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

ksh93: Unerwünschtes Überschreiben GlobalVar durch LokalVar

Hallo Zusammen,

zunächst hoffe ich dass ihr mich Neuling willkommen heißt und ich hier die "Erlösung" finde.

Ich habe ein Problem durch eine Lokalvariable welche meine Globalvariable überschreibt. Zwecks Anschauung folgende Skript-Skizze:


Code:
# LocalVar.sh 

test_loc_var()
{ 
typeset -t var 
var=Lokalvariable 
echo "var = $var" 
} 

typeset var=Globalvariable 

echo "var = $var" 
test_loc_var 
echo "var = $var"


Bei Ausführung mit
Code:

Code:
bash /bin/bash LocalVar.sh

erhalte ich das gewünschte Ergebnis:

Code:
var = Globalvariable 
var = Lokalvariable 
var = Globalvariable

Bei Ausführung mit

Code:
ksh /bin/ksh LocalVar.sh

erhalte ich das ungewünschte Ergebnis:
Code:
var = Globalvariable 
var = Lokalvariable 
var = Lokalvariable

Es muss aber in ksh funktionieren. Kann mir Jemand von euch bitte weiterhelfen? Es muss doch möglich sein auch unter Linux eine lokale Variable zu definieren, die nicht eine gleichnamige Globalvaribale überschreibt? Die Definition mit der Variable innerhalb der Funktion mit "local" hat leider nicht funktioniert.

Ganz wichtig: Ich nutze übrigens folgende ksh-Version:

Code:
$ rpm -qa | grep -i ksh 
ksh-93s-59.11.35

Die Skripte liefen vorher unter AIX 6.1 TL08 SP02 in folgender ksh-Version:

Code:
$ lslpp -l | grep -i ksh 
bos.rte.shell 6.1.8.15 APPLIED Shells (bsh, ksh, csh)

Die bestehenden Skripte sollen mit so wenig Anpassungen wie möglich von AIX-ksh nach Linux-ksh migriert werden, müssen deshalb weiter unter ksh laufen.

Vielen Dank für jeden noch so kleinen aber hilreichen Rat :)
 

whois

Ultimate Guru
HI

Erstmal herzlich Willkommen hier.
Ich weiss das ist wahrscheinlich Lötzinn was ich jetzt von dir hier will aber zeigst du mir das mal bitte.

Code:
ksh --version

Nur mal so zur Info auch wenn mit rpm -qa alles geklärt sein sollte.

cu

/edit: Ich versuche gerade die Unterschiede zwischen den Korn Versionen raus zu lesen finde aber im Moment nicht entscheidendes.

http://www2.research.att.com/sw/download/man/man1/ksh.html
 
OP
K

Kölner2202

Newbie
Hallo Zusammen,

der Tipp mit function war entscheidend und zielführend, vielen Dank :)

Bei folgendem Code überschreibt die Lokalvariable nicht mehr die Globalvariable:

Code:
function test_loc_var
{
  typeset -t var
  var=Lokalvariable
  echo "var = $var";
}

typeset var=Globalvariable

echo "var = $var"
test_loc_var
echo "var = $var"

Auf Linux
Code:
$ ksh --version
version         sh (AT&T Research) 93s+ 2008-01-31

AIX unterstützt den Befehl
Code:
ksh --version
nicht

Trotzdem noch zum Abschluss die Frage, warum sich die ksh auf AIX und SUSE-Linux unterschiedlich verhält? Beides kommt doch aus Kornshell.org und müsste sich gleich verhalten?

Viele Grüße aus Köln :)
 

tomm.fa

Administrator
Teammitglied
Da vom TE noch nicht selbst erledigt auch hier der Hinweis für die Mitleser und -wirkenden:
http://www.linux-forum.de/ksh93-lokalvariable-ueberschreibt-globalvariable-2299731.html
http://www.linuxforen.de/forums/showthread.php?t=274915
 

framp

Moderator
Teammitglied
Danke tomm.fa fuer die Verlinkung.

Mal wieder ein Paradebeispiel wie man es nicht machen sollte :-x .
 
Oben