You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本如何从配置文件动态解析对应域名的密钥变量?

嘿,这个错误很好解决——你用错命令啦!let是专门用来做算术计算的,不是用来获取字符串变量值的,难怪它看到key-to-something这种非数字内容会报错。

接下来给你两种解决方案,适配不同的Shell环境:

如果你要兼容POSIX标准Shell(比如系统默认的sh)

用eval来实现动态变量的引用,这是POSIX环境下通用的做法:

#!/usr/bin/env sh
source ./vars.config

key="_key"

for i in "${domains[@]}"; do
    # 把域名的点替换成下划线,生成变量名前缀
    base="$(echo "$i" | tr . _)"
    # 拼接出完整的变量名,比如something_com_key
    varname="${base}${key}"
    # 通过eval获取这个变量的值
    farmid=$(eval echo "\$$varname")
    echo "$farmid"
done

如果你用Bash(推荐,更安全)

如果你的脚本可以用Bash运行(把开头改成#!/usr/bin/env bash),可以用Bash自带的间接变量扩展语法,比eval更安全,不会有命令注入的风险:

#!/usr/bin/env bash
source ./vars.config

key="_key"

for i in "${domains[@]}"; do
    base="$(echo "$i" | tr . _)"
    varname="${base}${key}"
    # 用${!varname}直接获取动态变量的值
    farmid="${!varname}"
    echo "$farmid"
done

还要注意几个小细节:

  • 你原始脚本里#!/usr/bin/env sh和source命令写在同一行,这会导致脚本无法正确识别解释器,一定要分成两行写!
  • 遍历数组的时候记得用"${domains[@]}"(带双引号),不然如果域名里有空格或者特殊字符,遍历会出问题。
  • 变量赋值和引用时尽量加双引号,避免字符串被意外拆分。

内容的提问来源于stack exchange,提问作者TimmyV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:52