Hallo Jürgen, Am Donnerstag, 14. August 2008 09:59:55 schrieb Dr. Jürgen Vollmer:
1. Weil syntaktisch falsch while read LINE; do DSL[$((i++))]=$LINE; done;
while read LINE; do DSL[i++]=$LINE; done war schon richtig: man bash: The subscript is treated as an arithmetic expression that must evaluate to a number greater than or equal to zero. ... ... Shell variables are allowed as operands; parameter expansion is performed before the expression is evaluated.
2. man bash: Each command in a pipeline is executed as a separate process (i.e., in a subshell).
Probier mal (hier wird keine Pipe benutzt) i=1; while read LINE; do echo $((i++)); done < EINE_DATEI ; echo danach i = $i;
Hier wird danach der "erwartete" Wert ausgegeben.
Der Umweg über die Datei war mir schon bekannt, aber read liest auch von der Standard-Eingabe man read: (bash buildin commands) read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...] One line is read from the standard input, or from the file descriptor fd supplied as an argument to the -u option, and the first word
Lösung also: TF=/tmp/foo.$$ /usr/bin/cinternet -I > $TF while read LINE; do DSL[$((i++))]=$LINE; done < $TF
nach ein bisschen googlen (oder googeln?) sieht meine Lösung jetzt so aus: basar:/etc/ppp # unset DSL; i=1; while read LINE; do DSL[i]=$LINE; echo "$i ${DSL[i++]}"; done < <(/usr/bin/cinternet -I); 1 01 i dsl1 2 02 a dsl2 Vielen Dank für die Unterstützung und viele Grüße Günter -- Guenter Ohmer Jahnstrasse 24 D 76865 Rohrbach mailto:guenter.ohmer@gmx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org