配列をパラメータとして渡す方法は?

配列をパラメータとして渡す方法は?

array特に、関数が中間にある場合、どのように関数に渡しますか?どちら"${b}""${b[@]}"最初の項目だけを渡すようですが、同時に呼び出して検索する方法はありますか?

#/usr/bin/env bash

touch a b1 b2 b3 c

f()
{
    local a="${1}"
    local b="${2}"   
    local c="${3}"
    ls "${b[@]}" # expected b1 b2 b3
}

a=a
b=("b1" "b2" "b3")
c=c

f "${a}" "${b}" "${c}"
f "${a}" "${b[@]}" "${c}"

rm a b1 b2 b3 c

ベストアンサー1

シェルから配列内のすべての個々の要素(配列インデックスによるソート)への拡張は、配列デザインがコピーされるbashシェルkshと同じです。bash"${array[@]}""$array""${array[0]}"

したがって、配列のすべての要素を関数に渡すことはですf "${array[@]}"

これで関数のパラメータは を介し​​てアクセスされるので、"$@"関数は次のようになります。

f() {
  ls -ld -- "$@"
}

f "$a" "${b[@]}" "$c"

別のオプションは、名前で配列を渡し、名前付き参照を使用することです((ksh93)bashからkshコピーした他の機能):

f() {
  typeset -n array="$1"
  ls -ld -- "${array[@]}"
}

f b

または、fファイル名、配列名、他のファイル名など3つのパラメータを使用します。

f() {
  typeset -n array="$2"
  ls -ld -- "$1" "${array[@]}" "$3"
}

f "$a" b "$c" 

csh配列(、、、、、、、tcsh)を持つ他のほとんどすべてのシェルでは、単に使用して配列内のすべてのrc要素に拡張できます。他のすべてのシェルでは、配列は通常(非希少)配列でもあります。ただし、いくつかの注意事項があります。 csh/tcsh と yash ではまだ分割+globの影響を受け、これを解決するにはinとout が必要で、では null 削除 (再度または周辺) の影響を受けます。eszshyashfish$array$array$array:q(t)csh"${array[@]}"yashzsh$array"${array[@]}""$array[@]""${(@)array}"

おすすめ記事