bash で、変数値ではなく変数名をエコーするにはどうすればよいですか?

bash で、変数値ではなく変数名をエコーするにはどうすればよいですか?

bash に変数があるとしますvar。これに値を割り当てることができます。たとえば、文字列にします。

var="Test"

echo私が知りたいのは の名前であってvar、 が保持する値ではありませんvar。( では後者を実行できますecho $varが、実際に実行したいのは前者です。)

SOからのこの質問への答えを使うように書かれていますecho ${!var}が、そうするとechoはただの空行を返します。例えば、このbashスクリプト

#!/bin/bash

echo "Hi"
var="Test"
echo ${!var}
echo "Bye"

次の出力を返します:

Hi

Bye

間に空白行を挟んでこんにちはそしてさよなら、 の代わりにvar何が間違っているのでしょうか?

走っていますバッシュ4.1.5(1)の上ウブントゥ 10.04.4

答え1

シェルパラメータの拡張 ${!name@}または${!name*}うまくいくかもしれない、

$ foo=bar
$ var_name=(${!foo@})
$ echo $var_name" = "$foo
foo = bar

実現可能ではありますが、これがどのような有用性を持つのか想像できません...

答え2

単純に静的変数名を出力したい場合は、$- 記号をエスケープすることができます。

echo \$var

関連情報