配列を関数に渡す場合:
func()
{
echo $1
echo $2
echo $3
}
myArray=("This" "Is" "An Array")
func "${myArray[@]}"
これにより、配列の各要素が関数の別々のパラメータとして渡されます。
関数の1つのパラメータに配列全体のみを受け取る方法はありますか?
ベストアンサー1
ある程度は可能です。 Bashとksh93にはポインタと同様の名前参照があり、配列を渡すことができます。名前その機能に移動し、そこで使用してください。
#!/bin/bash
function byname {
typeset -n _p=$1
echo "second item of '$1' is ${_p[1]}"
echo "second arg to this function is \"$2\""
}
blah=(a b c)
byname blah "other arg"
しかし、Bashでは、namerefの名前(_p
ここでは)はそれが指す変数の名前と異なる必要があるため、再帰関数にはあまり役に立ちません。 kshは、kshスタイル関数で同じ名前(function foo
代わりに)のみを使用します。foo()
ラベルに示されているように、これは引用する、コピーではないため、関数内の配列を変更すると、変更がデフォルトプログラムに表示されます。
もう一つの悪いオプションは、配列を文字列に連結して変数として渡すことです。
function concated {
echo "the whole array is \"$1\""
}
concated "${blah[*]}"
ただし、これは配列から文字列へのパッケージングのための複雑なシステムを用意しない限り、基本的に配列を使用する目的を無効にします。
上記の呼び出しはもちろん、次のように印刷されます。
second item of 'blah' is b
second arg to this function is "other arg"
the whole array is "a b c"