Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

dash: Trick, dass Array-Variable akzeptiert wird?

0 views
Skip to first unread message

Manuel Reimer

unread,
Nov 1, 2009, 4:28:55 PM11/1/09
to
Hallo,

ich muss aus einem Script, welches ich aus Performancegr�nden in der
"dash" ausf�hren will, eine Datei einlesen, die so aufgebaut ist:

WERT[0]=xxxx
WERT[1]=yyyy

In der Bash habe ich das einfach via "source" eingelesen. Die "dash"
verweigert allerdings die Eintr�ge als Variablen (wohl wegen der eckigen
Klammern).

Schlimmstenfalls w�rde ich die dash f�r meine Zwecke patchen, sodass die
eckigen Klammern akzeptiert werden. Array-Funktionen selbst brauche ich
nicht. Sch�ner w�re es aber, wenn man es sauberer l�sen k�nnte...

Danke f�r jeden Tipp.

CU

Manuel

--
Alle wollen zur�ck zur Natur - aber keiner zu Fu�
Der Mensch erfand Maschinen, um sich damit die Arbeit zu erleichtern.
Nur leider hat er vergessen, rechtzeitig damit aufzuh�ren...
Beitr�ge mit *X-No-Html Header* kann ich weder lesen, noch beantworten!

Sven Mascheck

unread,
Nov 1, 2009, 5:16:30 PM11/1/09
to
Manuel Reimer wrote:

> ich muss aus einem Script, welches ich aus Performancegr�nden in der
> "dash" ausf�hren will, eine Datei einlesen, die so aufgebaut ist:
>
> WERT[0]=xxxx
> WERT[1]=yyyy
>
> In der Bash habe ich das einfach via "source" eingelesen. Die "dash"
> verweigert allerdings die Eintr�ge als Variablen (wohl wegen der eckigen
> Klammern).
>
> Schlimmstenfalls w�rde ich die dash f�r meine Zwecke patchen, sodass die
> eckigen Klammern akzeptiert werden. Array-Funktionen selbst brauche ich
> nicht.

Wenn Arrays also gar nicht ben�tigt werden?:
Vorher die Arrays in der Datei mit sed in normale Variablen umschreiben?

Wenn die Performance so wichtig ist, aber der betr�chtliche Aufwand,
eine Shell zu patchen, in Betracht kommt:
Zumindest im relevanten Teil auf awk/perl/o.�. zur�ckgreifen?


Marcel Bruinsma

unread,
Nov 1, 2009, 11:48:22 PM11/1/09
to
Am Sonntag, 1. November 2009 22:28, Manuel Reimer a écrit :

> ich muss aus einem Script, welches ich aus Performancegründen in
> der "dash" ausführen will, eine Datei einlesen, die so aufgebaut ist:


>
> WERT[0]=xxxx
> WERT[1]=yyyy

sed 's;\[\([0-9][0-9]*\)\]=;\1=;' datei >datei..
. ./datei..
rm datei..

--
printf -v email $(echo \ 155 141 162 143 145 154 142 162 165 151 \
156 163 155 141 100 171 141 150 157 157 056 143 157 155|tr \ \\\\)
# Live every life as if it were your last! #

Manuel Reimer

unread,
Nov 2, 2009, 3:47:48 AM11/2/09
to
Marcel Bruinsma wrote:
>> WERT[0]=xxxx
>> WERT[1]=yyyy

> sed 's;\[\([0-9][0-9]*\)\]=;\1=;' datei >datei..
> . ./datei..
> rm datei..

Die Datei wird dynamisch generiert und nein, ich habe keinen Einfluss
auf das Format.

Leonard Orb

unread,
Nov 2, 2009, 8:36:37 AM11/2/09
to
Manuel Reimer:

> ich muss aus einem Script, welches ich aus Performancegründen in der

> "dash" ausführen will, eine Datei einlesen, die so aufgebaut ist:


>
> WERT[0]=xxxx
> WERT[1]=yyyy

Mehr Infos über die Zielsetzung der Aktion wären hilfreich.

Vllt. hilft es ja, die Daten anders anzuordnen?

bash -c "source wertliste; echo \"\${WERT[*]}\""

oder

bash -c "source wertliste; IFS=$'\n'; echo \"\${WERT[*]}\""

Leo

Tobias Nissen

unread,
Nov 3, 2009, 9:43:01 AM11/3/09
to
Manuel Reimer wrote:
> Marcel Bruinsma wrote:
>>> WERT[0]=xxxx
>>> WERT[1]=yyyy
>
>> sed 's;\[\([0-9][0-9]*\)\]=;\1=;' datei >datei..
>> . ./datei..
>> rm datei..
>
> Die Datei wird dynamisch generiert und nein, ich habe keinen Einfluss
> auf das Format.

Hüh? Aber wenn da doch eine dynamisch generierte Datei ist, warum geht
obiger Vorschlag nicht?

Wenn Dich die Performanceeinbuße stört, dann kannst Du das Konvertieren
mit sed und das Einlesen ja nebenläufig gestalten. Etwa indem Du sed im
Hintergrund machen lässt.

Manuel Reimer

unread,
Nov 4, 2009, 4:56:52 AM11/4/09
to
Tobias Nissen wrote:
> H�h? Aber wenn da doch eine dynamisch generierte Datei ist, warum geht
> obiger Vorschlag nicht?

Klar, geht. Ich hatte das als Aufforderung verstanden, die Datei zu
konvertieren und die alte Datei zu l�schen. Klar geht es �ber eine
tempor�re Datei. Auch m�glich scheint mir das:

while read line; do eval $line; done <<EOF
$(sed 's/\[\([0-9][0-9]*\)\]=/\1=/' datei)
EOF

Komisch nur, dass es die Schleife braucht, denn ein "eval $(sed...)" tut
nicht.

0 new messages