• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] bash in_array

endor

Member
Hallo,

ich würde gern eine in_array Funktion (so wie aus PHP bekannt) in bash realisieren. Ich übergebe also ein Element und ein Array und teste ob das Element im Array ist. Mein Problem ist jetzt: Wie übergebe ich das Array?

Zum Test habe ich folgendes versucht, was aber leider nur 1 ausgegeben hat:
Code:
function in_array() {
  ARRAY=$1
  echo "${#ARRAY[@]}"
}

ARR=(A B C D)
in_array ARR
 

abgdf

Guru
Hi,

bash ist nicht PHP. Übergebene Arrays werden plattgedrückt wie in Perl:
Code:
#!/bin/bash

in_array() {
    for i in $@
    do
        echo $i
    done
}

ARR=(A B C D)
in_array ${ARR[@]}
Arrays

http://tldp.org/LDP/abs/html/arrays.html

sind in der Shell nicht allzu üblich und werden von alten Shell-Versionen sogar gar nicht unterstützt.

Viele Grüße
 
OP
E

endor

Member
Danke.

Die Seite hab ich zwar offen, aber anscheinend habe ich das irgendwie überlesen. An der Stelle scheint die Funktion nicht wirklich Sinn zu machen, da es ja ähnlich viel Code erzeugt.
 
abgdf schrieb:
Übergebene Arrays werden plattgedrückt wie in Perl:
Code:
#!/bin/bash
in_array() {
    for i in $@
    do
        echo $i
    done
}

ARR=(A B C D)
in_array ${ARR[@]}
Wo drückt Perl Arrays platt? Du willst sicher auch "$@" "$i" und "${ARR[@]}" damit sie nicht "plattgedrückt" werden.
 

abgdf

Guru
Wo drückt Perl Arrays platt?
:shock: Na, immer bei der Übergabe an eine Funktion, siehe erstes Posting von "andreasfriedrich" hier

http://www.webmasterworld.com/forum13/2610.htm

und sicher auch irgendwo in "perldoc".

Gruß
 
Oben