bash4.3以前に関数を使用して配列を参照する方法

bash4.3以前に関数を使用して配列を参照する方法

もし我々:

  1. 次に配列を定義します。
  2. 機能を定義したい。
  3. 関数内でこの配列を呼び出します。

私たちはできます。このように:


入力する:

myArray=('1' '2' '3' '4' '5')

myFunction () 
{ 
local -n myList="$1";
echo "${myList[@]}";
}

myFunction myArray

出力:

1 2 3 4 5

したがって、はの範囲に${myArray[@]}入る。${myList[@]}myFunction

bashただし、この方法はバージョン4.3.xでのみ機能します。

以前のバージョンでこれをどうやって(そしてどうすればいいですか?)

ベストアンサー1

以前のbashでは、「可変間接参照」が必要です(セクション4)。シェルパラメータ拡張)これは配列にとって本当に見苦しいことです。

myArray=('1' '2' '3' '4' '5')
myFunction() {
    local arr="${1}[@]"         # array expansion *as a string*
    local values=( "${!arr}" )  # actual array expansion
    echo "${values[@]}"
}
myFunction myArray
1 2 3 4 5

これはあなたにコピーソート。この機能を変更するといいえmyArray外部範囲の変更:

myFunc2_old () {
    local arr="${1}[@]"
    local values=( "${!arr}" )  # here's the copy
    values[0]=foo
    declare -p values
}
myFunc2_old myArray; declare -p myArray
declare -a values=([0]="foo" [1]="2" [2]="3" [3]="4" [4]="5")
declare -a myArray=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")

名前参照の逆

myFunc2_ref () {
    local -n arr=$1
    arr[0]=foo
    declare -p arr
}
myFunc2_ref myArray; declare -p myArray
declare -n arr="myArray"
declare -a myArray=([0]="foo" [1]="2" [2]="3" [3]="4" [4]="5")

おすすめ記事