鉴于我有一个 bash 脚本
ev=USER
Run Code Online (Sandbox Code Playgroud)
如何使用 ev 获取 $USER 的环境变量值?
尝试天真地做:
echo ${"$"$ev}
Run Code Online (Sandbox Code Playgroud)
这导致糟糕的替代。
我希望能取回 $USER 的任何价值。
Kus*_*nda 11
通过使用间接扩展(有时也称为“变量间接”),
ev=USER
printf '%s\n' "${!ev}"
Run Code Online (Sandbox Code Playgroud)
这在bash
(5.0) 手册的“参数扩展”部分中有描述。
或者,通过进行ev
名称引用(需要bash
4.3+),
declare -n ev=USER
printf '%s\n' "$ev"
Run Code Online (Sandbox Code Playgroud)
这在bash
(5.0) 手册中有所描述,就在名为“位置参数”的部分之前。
如果只是关于环境变量,而不是 shell 变量,那么在大多数系统上,您可以使用:
printenv -- "$ev"
Run Code Online (Sandbox Code Playgroud)
对于 shell 变量,使用任何类似 Bourne 的 shell,您可以执行以下操作:
eval 'printf "%s\n" "${'"$ev"}'}"'
Run Code Online (Sandbox Code Playgroud)
或与zsh
:
printf '%s\n' "${(P)ev}"
Run Code Online (Sandbox Code Playgroud)
或与bash
:
printf '%s\n' "${!ev}"
Run Code Online (Sandbox Code Playgroud)
如果 的内容$ev
不受您的控制,则所有 3 个都是任意命令注入漏洞。