Robby-TX5
10-02-2006, 10:34
Hi
ich habe folgendes Problem:
Mein Script liest Informationen aus einer Datei, die anschließend weiter verarbeitet werden sollen. Um es simple zu machen, stehen in der Datei Name.txt die Namen "Klaus" und "Walter", die ausgelesen und unterschiedlich interpretiert werden.
#!/bin/bash
#
# testscript
#
admin_name="kein_Name_vorhanden"
cat name.txt | while read name
do
case ${name} in
Klaus) admin_name=${name}",_das_ist_gut" ;;
Walter) admin_name=${name}",_das_ist_sogar_noch_besser" ;;
esac
printf "Admin-Name = %s \n" ${admin_name}
done
printf "Letzter eingelesener Admin-Name = %s \n" ${admin_name}
exit 0
Die Ausgabe sieht dann so aus:
./testscript.sh
Admin-Name = Walter,_das_ist_sogar_noch_besser
Admin-Name = Klaus,_das_ist_gut
Letzter eingelesener Admin-Name = kein_Name_vorhanden
Obwohl die Schleifendurchläufe die Variable eindeutig verändern, besitzt die Variable am Ende den "alten" Urprungswert. D. h. auch, dass die While-Read-Schleife mit einer Kopie der Variablen arbeiten muss, welche aber nach am Ende der While-Schleife verloren geht.
Wie komme ich denn an die veränderte Kopie der Variablen auch ausserhalb der Schleife?
Thanks for helping.
PS.: In einer "for ..... do" Schleife existiert das Problem nicht.
PS.: Das Phänomen existiert auf Linux und AIX, mit verschiedene Kernel-Versionen ( 2.6.14.3, i386; 2.6.5-7.97-pseries64, AIX 5.1 ML5) mit der bash als auch mit der ksh. Witziger Weise gibt die ksh unter AIX (und nur unter AIX) das für mich richtige Ergebnis raus.
ich habe folgendes Problem:
Mein Script liest Informationen aus einer Datei, die anschließend weiter verarbeitet werden sollen. Um es simple zu machen, stehen in der Datei Name.txt die Namen "Klaus" und "Walter", die ausgelesen und unterschiedlich interpretiert werden.
#!/bin/bash
#
# testscript
#
admin_name="kein_Name_vorhanden"
cat name.txt | while read name
do
case ${name} in
Klaus) admin_name=${name}",_das_ist_gut" ;;
Walter) admin_name=${name}",_das_ist_sogar_noch_besser" ;;
esac
printf "Admin-Name = %s \n" ${admin_name}
done
printf "Letzter eingelesener Admin-Name = %s \n" ${admin_name}
exit 0
Die Ausgabe sieht dann so aus:
./testscript.sh
Admin-Name = Walter,_das_ist_sogar_noch_besser
Admin-Name = Klaus,_das_ist_gut
Letzter eingelesener Admin-Name = kein_Name_vorhanden
Obwohl die Schleifendurchläufe die Variable eindeutig verändern, besitzt die Variable am Ende den "alten" Urprungswert. D. h. auch, dass die While-Read-Schleife mit einer Kopie der Variablen arbeiten muss, welche aber nach am Ende der While-Schleife verloren geht.
Wie komme ich denn an die veränderte Kopie der Variablen auch ausserhalb der Schleife?
Thanks for helping.
PS.: In einer "for ..... do" Schleife existiert das Problem nicht.
PS.: Das Phänomen existiert auf Linux und AIX, mit verschiedene Kernel-Versionen ( 2.6.14.3, i386; 2.6.5-7.97-pseries64, AIX 5.1 ML5) mit der bash als auch mit der ksh. Witziger Weise gibt die ksh unter AIX (und nur unter AIX) das für mich richtige Ergebnis raus.