配列を関数に渡す最も正しい方法は何ですか?

配列を関数に渡す最も正しい方法は何ですか?

非常に大きな配列があることを考えると、$large_list配列をパラメータとして使用する関数を作成する方法はありますか?たとえば、

echo_idx_array () {
    arr="$1"
    idx="$2"

    echo "${arr[$idx]}"
}

このようなタスクを実行する一般的な戦略は何ですか?変数を提供しようとしましたが$large_list空です。

パラメータリストの変更に合わせて関数を変更します。

ちなみに私はksh88を使用しており、できるだけ移植可能な答えを探しています。


編集する:これまで私が考える最善の方法は、配列を繰り返して各要素をパラメータとして関数に送信することです。これは非常に見苦しく、エラーが発生しやすく、特定の制限に非常に迅速に到達するしかないことは言うまでもありません。これが私がしたことです:

foo () {
    echo $*
}

cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
    cmd="$cmd ${large_list[$i]}"
    ((i=i+1))
done

eval $cmd

もっと良いことはないでしょうか?

ベストアンサー1

配列要素を関数に引数として渡すには、ksh構文を使用して配列要素をリストに展開します。

work_on_array "${myarray[@]}"

サフィックスは[@]配列拡張を作成します。二重引用符は、各要素が追加の拡張(分割およびワイルドカード)から保護されます。拡張の結果は通常、二重引用符のように1つの単語ではなく、配列内の要素の数だけ単語です。

これ窒素次に、配列の最初の要素は次のようになります。アクセスするには、次を参照してください。${N}eval他の変数「内部」で変数参照を使用する

おすすめ記事