Variablen per Schleife an externes Skript übergeben

J

Jan S.

Grünschnabel
Hallo zusammen!

Ich arbeite mit bash und habe ein kleines Skript erzeugt, das mir Variablen erzeugt, die folgendermaßen aussehen: rem[1]="0,5467"
die zahlen in [] werden dabei hochgezählt.
Jetzt möchte ich aber diese Variablen an ein externes Skript weitergeben...und zwar eine nach der anderen.
Das externe Skript frisst die Zahlen als $1.
sprich p.interpol 0,5467 $2 $3

bis jetzt sieht es folgendermaßen aus:

for file in cu*
do
echo $file
cd $file

### Counter für einzelne REM-Messpunkte
unset counter
while read information rest; do
(( counter++ ))
rem[$counter]="$information"
done < remwerte_$file
echo "Variablen rem[1-$counter] gesetzt."

### Zur Ueberpruefung Ausgabe der Variablen:
for (( newcounter=1; newcounter<=$counter; newcounter++ )); do
echo "rem[$newcounter]=\"${rem[$newcounter]}\""

done
done

Was ich allerdings als ziemlicher Anfänger nicht schaffe, ist es diese Variablen eine nach der anderen an p.interpol zu übergeben.

Also sprich ich möchte folgendes automatisieren:
p.interpol "rem[1]=0,5467"
p.interpol "rem[2]=0,3716"
p.interpol "rem[3]=0,1826"
p.interpol "rem[4]=0,9732"

usw... und das Ganze bis zum letzten rem[xx]...

kann mir hier jemand helfen?!

Vielen Dank!
 
Du willst also ein array übergeben, hab ich das richtig verstanden?
Solange es nur ein Array ist, geht das recht einfach. Man packt es einfach ans Ende der Argumentenliste und shiftet die Argumente davor weg:
Code:
$ cat father.sh 
#!/bin/bash

arr=( foo bar baz "blah mit leerzeichen" )

./child.sh einArgument "noch ein Argument" "${arr[@]}"

$ cat child.sh 
#!/bin/bash

arg1=$1 && shift
arg2=$1 && shift
arr=( "$@" )

echo "arg1 == $arg1, arg2 == $arg2"
echo "arr == ${arr[@]}"

for i in {0..100}; do
    [ "${arr[$i]}" ] && echo "arr[$i] == ${arr[$i]}"
done

$ ./father.sh 
arg1 == einArgument, arg2 == noch ein Argument
arr == foo bar baz blah mit leerzeichen
arr[0] == foo
arr[1] == bar
arr[2] == baz
arr[3] == blah mit leerzeichen
Wichtig zu wissen ist, dass nicht vorhandene Elemente im father-Array die Reihenfolge child-Array im zerstören. Deswegen würde ich das array auch bei 0 anfangen.
Consider:
Code:
$ cat uncle.sh 
#!/bin/bash

arr[1]=foo
arr[5]="bar baz"

./child.sh einArgument "noch ein Argument" "${arr[@]}"

$ ./uncle.sh 
arg1 == einArgument, arg2 == noch ein Argument
arr == foo bar baz
arr[0] == foo
arr[1] == bar baz

Man kann natürlich einfach arr[0] auf einen leeren String setzen, damit würde das child-Array auch mit Index 1 beginnen, ist aber imho nicht so sinnvoll.

Btw, arrays in bash sind hashes mit Integer-Keys. Deshalb werden die Values von nicht vorhandenen Keys natürlich nicht expandiert.
 
Hallo! "Gott"_in_schwarz trifft es denke ich ganz gut ;-)

Vielen Dank für den Vorschlag! Bin gerade damit fertig geworden ein Skript zu schreiben, dass mir ein Skript schreibt. :D
Ist in diesem Fall die einfachere Lösung, da das Skript dem die Variablen aus dem Array übergeben werden sollen bereits fertig ist und diese genau so vorportioniert übergeben werden können.

Werde das aber bei Gelegenheit nochmal ausprobieren!

Vielen Vielen Dank!
 

Ähnliche Themen

HandbrakeCLI Shell Skript

Parameter einer Variable zuordnen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Variableninhalt wird nicht gespeichert

MySQL-Abfrage an Variable übergeben

Zurück
Oben