zsh中如何通过插值字符串访问对应名称的环境变量?
解决zsh中间接引用环境变量的问题
你的脚本里$(STRIPE_$VAR)的写法是错误的——shell会把它识别为执行名为STRIPE_$VAR的命令,而非读取对应名称的环境变量值,这就是报错“command not found”的原因。
下面提供两种可行的解决方式:
方法一:使用zsh专属的参数扩展(推荐)
zsh支持${(P)}语法实现间接变量引用,安全且直观:
for VAR in "GB" "IE" "DE" "CA" "NY" do echo "${(P)STRIPE_$VAR}" done
${(P)}修饰符会将括号内的表达式结果当作变量名,自动解析出对应环境变量的值。
方法二:使用eval命令
如果需要兼容更多shell,可以用eval(注意:仅当变量内容可控时使用,避免注入风险):
for VAR in "GB" "IE" "DE" "CA" "NY" do eval "echo \$STRIPE_$VAR" done
eval会先解析字符串中的变量替换,将\$STRIPE_$VAR转换为$STRIPE_GB这类具体变量,再执行echo命令输出值。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

