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
,您使用nameref
aka 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)