for each schleife und arrays

Nemesis

Nemesis

N3RD
hi,
ich will in ein Firewallscript eine for-schleife einbauen, um die sache übersichtlicher und kürzer zu gestalten.
ich speichere ip-adressen in einem array, und möchte nun, dass eine schleife für jedes element in dem array 1x ausgeführt wird. sprich, das array hat 3 elemente inhalt, also soll die schleife 3x ausgeführt werden.

bsp:
Code:
array[1]=1
array[2]=2
array[3]=3

for ((i=1; i<=3 ; i++)) do
echo ${array[$i]};
done

das problem an diesem beispiel ist, wenn ich das array erweitere auf 4, 5 oder 6 inhalte, dann muss ich jedesmal die schleife anpassen, das möchte ich mir ersparen, er solls für jeden inhalt in dem array ausführen.

thx
 
Code:
array=( 1 2 3 )

for ((i=0; i<${#array[*]}; i++)) do
echo ${array[$i]};
done

echo ${#array[*]} gibt die Anzahl der Elemente im Array aus ;)
 
hi,
ich will in ein Firewallscript eine for-schleife einbauen, um die sache übersichtlicher und kürzer zu gestalten.
ich speichere ip-adressen in einem array, und möchte nun, dass eine schleife für jedes element in dem array 1x ausgeführt wird. sprich, das array hat 3 elemente inhalt, also soll die schleife 3x ausgeführt werden.

bsp:
Code:
array[1]=1
array[2]=2
array[3]=3

for ((i=1; i<=3 ; i++)) do
echo ${array[$i]};
done

das problem an diesem beispiel ist, wenn ich das array erweitere auf 4, 5 oder 6 inhalte, dann muss ich jedesmal die schleife anpassen, das möchte ich mir ersparen, er solls für jeden inhalt in dem array ausführen.

thx


lass deine schleife bis array.length gehen.

ciao

//edit: ist dass Bsp. von oben nicht eh falsch ist? Dein Array hat schon im obigen Beispiel die Länge 4, oder wird array[0] als nicht beschreiben gesehen?
 
Zuletzt bearbeitet:
ja, ahm ... ich lass die 0 immer gerne weg ... frag nicht warum ;)

jo, das funktioniert mit ner # davor, ich habs ohne probiert, dann gibt er den gesammten inhalt aus

thx!
 
Zuletzt bearbeitet:
Warum nicht einfach:
Code:
for item in "${array[@]}"; do echo $item; done
o0?
Wenn der Index zwingend benötigt wird würde ich den halt noch extra mitlaufen lassen, also:
Code:
i=0; for item in "${array[@]}"; do echo $item; ((i++)); done
IMHO wesentlich übersichtlicher...
 
Du redest von der bash?
Oder?
In der C-Shell ist das nämlich ganz anders.
Aber zur Bash:
...
Any element of an array may be referenced using ${name[subscript]}. The braces are required to avoid conflicts
with pathname expansion. If subscript is @ or *, the word expands to all members of name. These subscripts dif‐
fer only when the word appears within double quotes. If the word is double-quoted, ${name[*]} expands to a sin‐
gle word with the value of each array member separated by the first character of the IFS special variable, and
${name[@]} expands each element of name to a separate word. When there are no array members, ${name[@]} expands
to nothing. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined
with the beginning part of the original word, and the expansion of the last parameter is joined with the last
part of the original word. This is analogous to the expansion of the special parameters * and @ (see Special
Parameters above). ${#name[subscript]} expands to the length of ${name[subscript]}. If subscript is * or @, the
expansion is the number of elements in the array. Referencing an array variable without a subscript is equiva‐
lent to referencing element zero.
Das zeigt, warum die Lösung vom "Gott_in_schwarz" funktioniert.

Gesundes Neues

Wolfgang
 

Ähnliche Themen

Raid-1 einrichten

Rollei Mini Wifi Camcorder

Max_Args trotz for-Schleife überschritten...

in_array Problem

Variable durch Schleife setzen

Zurück
Oben