変数名とその値を印刷するにはどうすればよいですか?


回答:


21

簡単な方法で:

j="jjj"
k="kkk"
l="lll"

for i in {j,k,l}; do echo "$i = ${!i}"; done

出力:

j = jjj
k = kkk
l = lll

  • ${!i}- bashの可変膨張/間接(に保持された変数名の値を取得します$i

2
あなたも以下で{j,k,l}短くすることができます{j..l}:)
αғsнιη

@αғsнιη、3つのアイテムしかない限り、範囲の拡張には妥当です- {j,k,l}十分です
RomanPerekhrest

1
j k l十分でしょう。
ステファンChazelas

6

bash v4.4以降を使用している場合は、${VAR@A}パラメーター拡張演算子を使用できます。

これについては、セクション3.5.3シェルパラメータの展開の Bashマニュアルで説明されています。

「A」演算子

拡張は、割り当てステートメントまたは宣言コマンドの形式の文字列であり、評価された場合、その属性と値を使用してパラメーターを再作成します。

だからこれであなたはできる:

j="jjj"
k="kkk"
l="lll"

for i in {$j,$k,$l}; do 
    echo "${i@A}"
done

そしてあなたの結果は次のようになります:

j='jjj'
k='kkk'
l='lll'

5

またはzsh使用中declare -p

% j=jjj; k=kkk; l=(l l l)               
% for v in j k l; do declare -p $v; done
typeset j=jjj
typeset k=kkk
typeset -a l=( l l l )
% 

3
Bashでも動作します
Steven Penny

2

${!i}よりクリーンで高速なソリューションですが、完全を期すために、間接参照は次の例でも取得できます。

 foo=bar
 bar=baz
 $ echo $foo
 bar
 $ eval echo \$${foo}
 baz

したがって:

 j="jjj"
 k="kkk"
 l="lll"

 for i in {j,k,l}; do
   echo "$i = `eval echo \\$${i}`"
 done

与える:

 j = jjj
 k = kkk
 l = lll

参照:

間接参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.