通过变量名获取环境变量?

rog*_*ger 56 shell bash environment-variables

例如,我有一个变量:

env_name="GOPATH"
Run Code Online (Sandbox Code Playgroud)

现在我想像这样获取环境变量GOPATH

echo $GOPATH
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得$GOPATH通过$env_name

cuo*_*glm 58

不同的 shell 有不同的语法来实现这一点。

在 中bash,您使用可变间接

printf '%s\n' "${!env_name}"
Run Code Online (Sandbox Code Playgroud)

在 中ksh,您使用namerefaka typeset -n

nameref env_name=GOPATH
printf '%s\n' "$env_name"
Run Code Online (Sandbox Code Playgroud)

在 中zsh,您使用P 参数扩展标志

print -rl -- ${(P)env_name}
Run Code Online (Sandbox Code Playgroud)

在其他 shell 中,您必须使用eval,如果您不确定变量内容是否安全,这会给您带来许多安全隐患:

eval "echo \"\$$name_ref\""
Run Code Online (Sandbox Code Playgroud)

  • 在`bash`中我使用了`printf '%s\n' "${env_name}"` (2认同)