1

しばらくの間、この関数を使用して配列内の値を見つけましたが、改善したいと思います。

 # Checks if the first argument is found in the subsequent ones.

 function my_function_is_value_in() {

   local -r NEEDLE=$1
   local -ra HAYSTACK=( "${@:2}" )

   local value
   for value in "${HAYSTACK[@]}"; do
     [[ $value == "$NEEDLE" ]] && return 0
   done

   return 1

 }

HAYSTACK「読みやすさのためのパラメーターの名前変更」配列への割り当ては、特に「検索」機能の場合、非効率的であり、何度も実行される可能性があると思います。

my_function_is_value_in coconut cherry coriander coconut cottage-cheese

Bash には上記のことを行う効率的な方法がありますか、それともできるだけ${@:2}効率的に直接ループしていますか?

と比較/対照してください..これはまさにこれを行うためperlgrep( /pattern/ @array)専用関数です。

4

2 に答える 2

1

これにより、より良い結果が得られる可能性がありますが、どちらの方法でも実証するための測定は行っていません。

function my_function_is_value_in()
{
    local -r NEEDLE=$1
    shift
    local value
    for value in "$@"
    do
        [[ $value == "$NEEDLE" ]] && return 0
    done
    return 1
}

この考え方は、シェルがこのように引数の配列のコピーを作成する必要がないということです。それは物事をスピードアップするはずです。

于 2013-04-01T02:05:37.580 に答える