読んだ後この回答著者: Kusalananda 変数属性が何であるかについてある程度知っていますが、変数属性の「名前参照」(型?) とは何か、その目的が何なのか、なぜ bash スクリプトで使用されるのかが欠けています。
「名前参照」(引用符を除く)という用語をインターネットで検索してみましたが、その用語のWiki記事を見つけることができませんでした。
ベストアンサー1
例:2回通過分離機能する配列。
#!/bin/bash
foo () {
declare -n array1="$1"
declare -n array2="$2"
echo 'The 1st array:'
printf '\t%s\n' "${array1[@]}"
echo 'The 2nd array:'
printf '\t%s\n' "${array2[@]}"
}
a=( 1 2 3 )
b=( a b c )
foo a b
テスト:
$ bash script.sh
The 1st array:
1
2
3
The 2nd array:
a
b
c
名前で変数を参照せずに同じことを行うのは難しい場合があります。呼び出しごとに1つの配列のみを処理するように関数を変更したり、2つの配列のそれぞれの要素数を追加の引数として使用したり、特定のeval
方法(正しく実行するのは難しい)です。
関数から名前で変数を参照すると、関数に渡された(名前で)配列のデータを使用するのに難しい構文は必要なく、関数は通常の配列のように名前で変数を参照できます。
関数内の2つの変数array1
と参照、つまりおよびから名前で渡される変数array2
として使用できます。彼ら$1
$2
名前参照。
私はこれがC ++の「参照による呼び出し」と似ていると思いますが、呼び出し側で使用されるのではなく&variable
(C ++のように)受信者はローカル変数を参照として宣言します。