シェルの間接拡張変数

シェルの間接拡張変数

bashシェル内の変数を間接的に参照する必要があります。

make私は基本的に書くことで何ができるか知りたいです$($(var))

${$var}最も簡単な解決策を試しましたが、bash次のエラーが発生します。

bash: ${$var}: bad substitution

これを行う方法はありますか?

私がしたいのは、反復変数を使用してプログラムのすべてのパラメータ(、、、、...)を繰り返すことですが、間接参照を使用しないとそうすることは$1できません$2$3

答え1

var1=fooand がある場合と言えますfoo=bar。ただし、位置パラメータを繰り返すには、次のことがほぼ確実です。bar${!var1}

for i in "$@"; do
    # something
done

答え2

使用/bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar

答え3

grep + awkを使う

foo=bar
var_name=foo
set | grep -v var_name | grep ^"${var_name}=" | awk -F= '{ print $2 }'

出力は次のとおりです

bar

このアプローチが機能していることを確認するには、bashスクリプトを確認してください。

#!/bin/bash

function show_variable_value() {
  name=$1
  value=$(set | grep -v name | grep ^"${name}="  | awk -F= '{ print $2 }' )
  echo "${value}"
}


foo='bar'

# getting the variable value indirectly from the variable name
value=$(show_variable_value foo)
if [ "${value}" == "${foo}" ]; then
  echo "The function returned indirectly the variable value from the variable name >>> '${value}' == '${foo}'"
else
  echo "This approach does not work"
fi

関連情報