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


18

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

var="Test"

私が持ってechoいるvar値ではなく、の名前にしたいvar。(を使用して後者を実行できますが、echo $var実際は前者を実行したいです。)

SOからのこの質問に対する答えはuse echo ${!var}であると言っていますが、それを行うと、エコーは空白行を返すだけです。たとえば、次のbashスクリプト

#!/bin/bash

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

次の出力を返します。

Hi

Bye

varの代わりに、HiとByeの間に空白行だけを入れます。何が間違っていますか?

私が実行しているbashの4.1.5(1)上のUbuntu 10.04.4を。


11
えっと...ただecho var?
— Braiam

5
私はこの点を本当に理解していません。@Braiamが指摘しているように、そもそも変数の名前を定義しているので、常にそれを知っていて、常にそれを印刷することができます。実際に何をしようとしていますか?
— テルドン

3
SOソリューションのドリフトを見逃したと思います。試してくださいvar=Test; Test=SO; echo ${!var}
— iruvar

わかりませんが、何をしようとしているのですか?echo '$ var'
— レナンビセンテ

私は本当に興味があります、何のためにそれが必要でしたか教えてください!
— ブバカゾウバ16

回答:


22

シェルパラメータ展開の $ {!名前@}や$ {!名前*}トリックを行うことができ、

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

実行可能ですが、これの有用性は想像できません...


2
場合がありますfoo定義されていないがfoobarある、あなたが得られますfoobar。他の代替:var_name=${-+foo}(または${foo+foo})、 var_name=$'foo'、var_name=$"foo":-)
— ステファンChazelas

1
2つの変数fooとfoobarが表示され、両方が定義されている場合、式${!foo@}はに評価されfoo foobarます。答えが述べているように、その有用性は想像しにくいです。
— CppNoob

29

単純に静的変数名を出力する場合は、$-sign をエスケープできます。

echo \$var

3
これは受け入れられた解決策でなければなりません。
— デビッドポクソン

9
アルではありません!! この答えは良い解決策ではありません。これは単にoutput $varになりますが、変数名が動的な場合は役に立ちません。たとえば、で始まる環境変数のセットをフィルタリングする必要PREFIX_があるが、セットのサイズまたはその中の変数名については知らないとしましょう。受け入れられたソリューションは、このシナリオにより適しています。
— ヘクターバルベルデパレハ

aka var_name = "$(echo \ $ var)"
— ヨルダンゲオルギエフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.