bashスクリプトがあると仮定すると
ev=USER
evを使用して$ USERの環境変数の値を取得するには?
無邪気にこれを試してください:
echo ${"$"$ev}
これにより置換が不良になる可能性があります。
$USER値を返したいです。
答え1
間接拡張(「可変間接参照」とも呼ばれる)を使用すると、
ev=USER
printf '%s\n' "${!ev}"
bash
これは、(5.0)マニュアルの「パラメータ拡張」セクションで説明されています。
ev
または名前参照を作成する(bash
4.3以上が必要)
declare -n ev=USER
printf '%s\n' "$ev"
bash
これは(5.0)のマニュアルに記載されていますが、今後「位置パラメータ」というセクションです。
答え2
場合についてのみ環境シェル変数とは異なり、変数を使用すると、ほとんどのシステムで次のものを使用できます。
printenv -- "$ev"
シェル変数の場合は、Bourneに似たシェルを使用して次のことができます。
eval 'printf "%s\n" "${'"$ev"}'}"'
または以下を使用してzsh
:
printf '%s\n' "${(P)ev}"
または以下を使用してbash
:
printf '%s\n' "${!ev}"
コンテンツが$ev
あなたの管理下にない場合、この3つの脆弱性はランダムコマンドインジェクションの脆弱性です。
答え3
$ev
次の値を変更したら、コマンドを評価することもできます。
eval echo "$"$ev
この部分はこのように実行する"$"$ev
ために解析します。$USER
eval
echo $USER