1

https://stackoverflow.com/a/10820494/1764881から、標準的な方法は次のように思われることを知っています。

   var="SAMPLE$i"
   echo ${!var}

しかし、私はこれらの次のフォームのいずれかを行うことができないようです. それらはすべて失敗しました:

echo ${!SAMPLE$i}
echo ${!"SAMPLE$i"}

bash の man ページを読みましたが、まだ理解できませんでした。最初のフォームだけが受け入れられるというのは本当ですか?

4

1 に答える 1

2

はい。根底にあるロジックは、すべてのパラメーター展開が、展開するパラメーターの名前として単一のリテラル ワードを取り、追加の演算子が結果に対して何らかの処理を行うというものです。!も例外ではありません。var通常どおり展開されますが、結果は再び展開されます。

(余談ですが、配列もこの規則に従います。 に${array[2]%foo}2 つの演算子を適用するようなものに見えるかもしれませんarrayが、実際array[2]には 1 つのパラメーターの名前として扱われます。インデックスは任意の算術演算にできるため、少し違いがあります。リテラル数値ではなく式)。

${!prefix*}(完全を期すために、実際の例外とについて言及する必要があります。これらは、変数自体のクエリ${!name[*]}に同じ演算子を紛らわしく使用してい!ます。最初のリストには、同じプレフィックスで始まる変数名がリストされています。2 番目には、名前付き配列のキーがリストされています。)

于 2016-02-09T16:54:57.030 に答える