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

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • pjtoohot

    pjtoohot

    15 NİSAN 2008