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

  • BaaaStuds's channel

    BaaaStuds's

    10 Mart 2009
  • K-391

    K-391

    23 EKİM 2012
  • Numberphile

    Numberphile

    15 EYLÜL 2011