例如我有一个变量:
env_name="GOPATH"
现在我想获取环境变量GOPATH
,就像这样:
echo $GOPATH
我该如何$GOPATH
度过$env_name
?
答案1
答案2
eval
如果让 shell 的提示扩展处理间接寻址,则可以避免:
PS1=\$$env_name sh -si </dev/null 2>&1
这有一些优点 - 特别是扩展后不执行命令。所以这里唯一的危险是如果$env_name
包含命令替换。它扩展为的变量可以包含任何可能看起来像命令替换的内容,而不会产生危险,因为扩展不会尝试三次 - 仅两次。通过这种方式验证相当容易:
PS1=$"${env_name##*[\'\(]*}" sh -si </dev/null 2>&1
给定 POSIX sh
,这应该是非常安全的,没有任意代码执行的风险,同时仍然打印任何导出的环境变量(shell 可以理解的类型)到标准输出。