无需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
相关产品推荐
相关产品推荐

