SORU
10 EYLÜL 2010, Cuma


Eğer bir dizi değeri içeriyorsa, kontrol

Bash, eğer bir dizi belirli bir değeri içeriyorsa test etmek için en kolay yolu nedir?

EDİTbazı testlerden sonra cevapları ve açıklamaları yardımıyla, bu nasıl geldim:

function contains() {
    local n=$#
    local value=${!n}
    for ((i=1;i < $#;i  )) {
        if [ "${!i}" == "${value}" ]; then
            echo "y"
            return 0
        fi
    }
    echo "n"
    return 1
}

A=("one" "two" "three four")
if [ $(contains "${A[@]}" "one") == "y" ]; then
    echo "contains one"
fi
if [ $(contains "${A[@]}" "three") == "y" ]; then
    echo "contains three"
fi

Eğer en iyi çözüm olup olmadığından emin değilim, ama iş gibi görünüyor.

CEVAP
20 Aralık 2011, Salı


Aşağıda bunu başarmak için küçük bir fonksiyon. Arama dizesi ilk bağımsız değişken ve geri kalan dizi elemanları

containsElement () {
  local e
  for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
  return 1
}

Bu fonksiyon bir test gibi görünebilir:

$ array=("something to search for" "a string" "test2000")
$ containsElement "a string" "${array[@]}"
$ echo $?
0
$ containsElement "blaha" "${array[@]}"
$ echo $?
1

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fouseyTUBE

    fouseyTUBE

    21 Mart 2011
  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • Maschine Tutorials

    Maschine Tut

    15 ŞUBAT 2011