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

変数名とその値を出力する方法はありますか?

j=jjj k=kkk l=lll for i in j k l do .... done 

期待される出力(各変数は別々の行にあります):

j = jjj k = kkk l = lll 

上記の結果を得る方法を誰かが提案できますか?

コメント

回答

簡単な方法:

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が保持する変数名の値を取得します)

コメント

  • {j..l}を使用して{j,k,l}を短くすることもできます:)
  • @αғsнιη、' 3つしかない限り、拡張範囲に適しています。 ems- {j,k,l}で十分です
  • j k lで十分です。

回答

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

これについては、Bashのマニュアルのセクション 3.5.3シェルパラメータの拡張

“A”演算子

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

これにより、次のことが可能になります。

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

結果は次のようになります。

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

回答

またはzshdeclare -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 ) % 

コメント

  • Bashでも機能します

回答

${!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 

参照:

間接参照

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です