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

无需eval:Bash脚本中扩展同名变量作为命令参数的安全方法

不用eval实现动态变量值扩展的安全方法

方法1:使用Bash间接引用语法

Bash原生支持间接变量引用,通过${!变量名字符串}的语法,可以安全地获取与字符串同名的变量值,完全不需要eval。

修改你的代码如下:

customer0="/volume1/bob"
customer1="/volume1/joe"

num_of_customers=2

for ((i=0;i<$num_of_customers;i++)) 
do
    # 构造要引用的变量名
    target_var="customer$i"
    # 用间接引用获取变量值
    ssh username@127.0.0.1 du -sb "${!target_var}"
done

当i=0时,${!target_var}会解析为customer0变量的值/volume1/bob,符合你的需求。

方法2:改用Bash数组(更推荐)

用编号变量存储路径的方式不够直观,更规范的做法是使用Bash数组来管理这类列表,代码更简洁且不易出错:

# 用数组存储所有客户路径
customers=(
    "/volume1/bob"
    "/volume1/joe"
)

# 直接遍历数组中的每个路径
for path in "${customers[@]}"
do
    ssh username@127.0.0.1 du -sb "$path"
done

这种方式不需要手动维护客户数量变量,遍历逻辑更清晰,也从根源上避免了动态变量名的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:32:32