ubuntuusers.de

bash: Zwei Variablen in for-Schleife verwenden?

Status: Gelöst | Ubuntu-Version: Server 10.04 (Lucid Lynx)
Antworten |

scjunkie

Anmeldungsdatum:
7. Februar 2010

Beiträge: 15

Hallo~~

ich versuche mit bash etwas zu programmieren aber komme nicht mehr weiter..

#!/bin/bash
#
schleife ()
{
for i in $STR; do
        echo $i
donej
}
STR='00 11 22 33 44 55 66'
STR2='AA BB CC DD EE FF'

Hier werden die Werten der Variable "STR" nacheinander ausgegeben. Ich möchte aber dass auch die Werten der Variable "STR2" mit in die for-schleife mitgenommen und auch ausgegeben werden. Wie kann ich das erreichen?

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

Wohnort: south central EL

Ein Array sollte es tun…

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash
#
string='00 11 22 33 44 55 66'
string2='AA BB CC DD EE FF'

array=( $string $string2 )

schleife ()
{
for i in ${array[@]}; do
        echo $i
done
}

schleife

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Servus,

am einfachsten dürfte es sein, über die Indizes zu iterieren, nachdem du beides in Bash-Arrays „umgewandelt“ hast:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

schleife()
{
	# $1 ist das komplette $STR in diesem Fall. Durch die Zuweisung mit
	# Klammern wird ein Array daraus gemacht.
	arr1=($1)
	arr2=($2)

	# Iteriere über die Indizes.
	for (( i = 0; i < ${#arr1[@]}; i++ ))
	do
		echo $i: "${arr1[$i]}" "${arr2[$i]}"
	done
}

STR='00 11 22 33 44 55 66'
STR2='AA BB CC DD EE FF GG'

schleife "$STR" "$STR2"

Ich nahm mal stillschweigend an, dass „$STR“ und „$STR2“ gleich lang sein sollten. Ansonsten wäre die Fragestellung etwas komisch. 😉


Achso, nacheinander? Dann brauchst du kein Array. Da kannst du auch einfach die beiden Variablen hintereinander angeben:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ...

schleife2()
{
	for i in $1 $2
	do
		echo "$i"
	done
}

schleife2 "$STR" "$STR2"

Freizeitlinux

Avatar von Freizeitlinux

Anmeldungsdatum:
17. März 2010

Beiträge: 139

Du kannst einfach die Variablen konkatenieren. Sieht dann so aus:

#!/bin/bash
#
schleife ()
{
for i in $STR3; do
        echo $i
done
}
STR='00 11 22 33 44 55 66'
STR2='AA BB CC DD EE FF'

STR3="$STR $STR2";
schleife

donej ist übrigens Unsinn.

Freizeitlinux

Avatar von Freizeitlinux

Anmeldungsdatum:
17. März 2010

Beiträge: 139

Die ersten 3 Antworten wurden in der selben Minute gepostet. 😀

Dürfte ein Rekord sein.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Freizeitlinux schrieb:

Die ersten 3 Antworten wurden in der selben Minute gepostet. 😀

Dürfte ein Rekord sein.

… und nimmst du meinen Edit raus, dann hat es jeder anders verstanden/gelöst. Tja. 😉

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Ganz schön umständlich, finde ich.

Es geht doch auch mit einer einfachen {Brace Expansion} der Shell:

track@lucid:~$ STR='00,11,22,33,44,55,66'
track@lucid:~$ STR2='AA,BB,CC,DD,EE,FF'

track@lucid:~$ eval echo {$STR}{$STR2}
00AA 00BB 00CC 00DD 00EE 00FF 11AA 11BB 11CC 11DD 11EE 11FF 22AA 22BB 22CC 22DD 22EE 22FF 33AA 33BB 33CC 33DD 33EE 33FF 44AA 44BB 44CC 44DD 44EE 44FF 55AA 55BB 55CC 55DD 55EE 55FF 66AA 66BB 66CC 66DD 66EE 66FF

Was will man mehr ....?

track

scjunkie

(Themenstarter)

Anmeldungsdatum:
7. Februar 2010

Beiträge: 15

Wow. Wie schnell man hier geholfen wird!

… und nimmst du meinen Edit raus, dann hat es jeder anders verstanden/gelöst. Tja. 😉

Sorry Guys. Die Fragestellung war wahrscheinlich nicht ganz deutlich. Die Werte der Variablen STR und STR2 sollen schon getrennt abrufbar sein. Die Lösung von Vain mit Array kann ich in meiner Aufgabe gut verwenden!

Trotzdem danke an alle! 😀

Antworten |