Bashのマニュアルページでは、nameref以外のパラメータの間接的な拡張について、次のように説明します。
パラメータの最初の文字が感嘆符(!)で、パラメータがnamerefでない場合は、間接参照レベルが導入されます。 Bash は残りの引数を拡張することによって形成された値を新しい引数として使用し、その値は元の引数の拡張ではなく残りの拡張に使用されます。これを間接拡張といいます。 値には、チルダ拡張、パラメータ拡張、コマンド置換、および算術拡張があります。
しかし、最後の文章を再現することはできません。
settings x=y
、結果は予想通りですy=z
。z=end
$ echo ${!x}
z
設定x=y
とy='$z'
。z=end
$ echo ${!x}
$z
設定x='$y'
、y=z
およびz=end
。
$ echo ${!x}
-bash: $y: invalid variable name
それでは、文書で上記の拡張トピックの価値は何ですか?私は何を見逃していますか?
(使用されているBashバージョンは5.1.0(1)-リリース(x86_64-redhat-linux-gnu)です。)
答え1
これはドキュメントエラーのようです。これこのテキストを紹介したコミット反対方向:
CWRU/CWRU.log
ソースディストリビューションで関連する追加を引用すると、次のようになります。
+ 12/18
+ -----
+subst.c
+ - parameter_brace_find_indir: when expanding the indirect parameter
+ to find the eventual variable name, we don't perform word splitting.
+ Make sure this does the right thing for * and @. Fixes bug
+ reported by isabella parakiss <[email protected]>
+
+ 12/19
+ -----
+doc/{bash.1,bashref.texi}
+ - indirect expansion: make sure to note that the value of the indirect
+ variable does not undergo word splitting as one of its expansions,
+ as in fix from 12/18
テキストが欠落している可能性があります。いいえ:その価値はいいえトピック...。