私はこの詩をめくるのに苦労しましたman bash
。
ループの制御変数に
for
このnameref
属性がある場合、単語リストはシェル変数リストになり、ループが実行されると、リスト内の各単語に名前参照が設定されます。配列変数に属性を割り当てることはできません
-n
。ただし、nameref
変数は配列変数と添字配列変数を参照できます。
nameref
ループでこの変数の例を示し、説明を提供できますか?
答え1
nameref変数は「一般」変数のものであり、一般ファイルへのシンボリックリンクは何ですか?
$ typeset -n ref=actual; ref=foo; echo "$actual"
foo
forループは、リスト内の各単語に順番にバインドされたループ変数(「制御変数」)を使用して、ループの本文を実行します。
$ for x in one two three; do echo "$x"; done
one
two
three
これは連続割り当てを作成するのと同じです。
x=one; echo "$x"
x=two; echo "$x"
x=three; echo "$x"
ループ変数がnamerefの場合、namerefを使用して単語リストの各要素に対してボディが順番に実行されます。これは上記の一連の割り当てと同じではありません。 is a namerefref=value
割り当てref
は を指す変数に影響しますが、ref
for ループは参照に沿って指す変数を変更するのではなく、nameref が指す位置を変更します。
$ original=0; one=1; two=2; three=3
$ typeset -n ref=original
$ echo $ref
0
$ for ref in one two three; do echo "$ref"; done
1
2
3
$ echo original
0
ループ変数に割り当てると、割り当てによる間接アドレス指定も観察できます(一般的ではありませんが許可されています)。
$ one=1; two=2; three=3
$ typeset -n ref
$ for ref in one two three; do echo ref=$((ref+10)); done
$ echo "$one $two $three"
11 12 13
最後の文では、namerefのターゲットが配列になる可能性があることを説明します。 nameref自体は配列ではなく、まだスカラー変数ですが、代入または逆参照に使用される場合、指す変数の型のように動作します。
$ a=(0 1 2)
$ typeset -n ref=a
$ ref[1]=changed
$ echo "${a[@]}"
0 changed 2