Du könntest es tun:
if [[ " ${arr[*]} " == *" d "* ]]; then
echo "arr contains d"
fi
Dies führt beispielsweise zu falsch positiven Ergebnissen, wenn Sie nach "a b" suchen - dieser Teilstring befindet sich in der verknüpften Zeichenfolge, jedoch nicht als Array-Element. Dieses Dilemma tritt für jedes von Ihnen gewählte Trennzeichen auf.
Am sichersten ist es, das Array zu durchlaufen, bis Sie das Element finden:
array_contains () {
local seeking=$1; shift
local in=1
for element; do
if [[ $element == "$seeking" ]]; then
in=0
break
fi
done
return $in
}
arr=(a b c "d e" f g)
array_contains "a b" "${arr[@]}" && echo yes || echo no
array_contains "d e" "${arr[@]}" && echo yes || echo no
Hier ist eine "sauberere" Version, bei der Sie nur den Array-Namen und nicht alle Elemente übergeben
array_contains2 () {
local array="$1[@]"
local seeking=$2
local in=1
for element in "${!array}"; do
if [[ $element == "$seeking" ]]; then
in=0
break
fi
done
return $in
}
array_contains2 arr "a b" && echo yes || echo no
array_contains2 arr "d e" && echo yes || echo no
Bei assoziativen Arrays gibt es eine sehr übersichtliche Methode, um zu testen, ob das Array einen bestimmten Schlüssel enthält : den -v
Operator
$ declare -A arr=( [foo]=bar [baz]=qux )
$ [[ -v arr[foo] ]] && echo yes || echo no
yes
$ [[ -v arr[bar] ]] && echo yes || echo no
no
Siehe 6.4 Bedingte Bash-Ausdrücke im Handbuch.
bash
, mit einem einfachen Array das zu tun, was Sie wollen.