Variable verliert Wert?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
stollenreiter
Beiträge: 402
Registriert: 10.08.2004 16:30:47
Wohnort: Bremen

Variable verliert Wert?

Beitrag von stollenreiter » 13.12.2005 09:59:03

Hallo zusammen.

Eine kleine Frage zur bash:

mein Script

Code: Alles auswählen

x=0

cat /etc/mtab | while read satz; do
                x=1
                echo $satz
                echo $x;
                done

echo $x;
zeigt zum Schluss den Wert 0, aber während der Ausgabe von $satz eine 1. Warum? Wenn ich das in anderen Programmiersprachen mache, dann ist x zum Schluss 1 und nicht 0.

Ist da was Besonderes in der bash?

Gruß Andreas
Gruß Stollenreiter
wat mutt, dat mutt
Mein Jakobsweg heißt Darb al-Arba'in

Benutzeravatar
stollenreiter
Beiträge: 402
Registriert: 10.08.2004 16:30:47
Wohnort: Bremen

Beitrag von stollenreiter » 13.12.2005 11:40:18

So, wenn ich das Script jetzt so ändere

Code: Alles auswählen

x=0

while read satz; do
                x=1
                echo $satz
                echo $x;
                done < /etc/mtab

echo $x; 
dann kommt tatsächlich die 1?!?!

Setzt ich aber ein |grep suchzeichen hinter den Dateinamen, dann kommt wieder 0.

Kann es sein, das der | einen Subprozess ausführt und deswegen die Variable nicht verändert wird?

Gruß Andreas
Gruß Stollenreiter
wat mutt, dat mutt
Mein Jakobsweg heißt Darb al-Arba'in

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 13.12.2005 11:57:13

stollenreiter hat geschrieben:Kann es sein, das der | einen Subprozess ausführt und deswegen die Variable nicht verändert wird?
exakt:
man bash hat geschrieben: Each command in a pipeline is executed as a separate process (i.e., in
a subshell).
das "Useless cat" verwende ich auch recht gerne, aber in diesem Fall ist es auch stöhrend.

Gruß
gms

Benutzeravatar
stollenreiter
Beiträge: 402
Registriert: 10.08.2004 16:30:47
Wohnort: Bremen

Beitrag von stollenreiter » 14.12.2005 09:31:07

Hallo gms.

Vielen Dank für die Info.

Muß ich mir was anderes einfallen lassen.

Gruß Andreas
Gruß Stollenreiter
wat mutt, dat mutt
Mein Jakobsweg heißt Darb al-Arba'in

Antworten