Shell脚本中如何通过已有变量值创建新变量并赋值?
Shell脚本动态创建变量并赋值的正确方法
你尝试的两种写法都存在语法问题,导致报错:
- 写法一:
"var_$i"='true'会被bash当作完整命令执行,它把var_1=true识别成命令名,自然找不到对应命令。 - 写法二:
${!var_indirect}是bash的间接引用语法,只能用来读取变量值,不能用于赋值,因此触发语法错误。
以下是几种能实现你需求的正确写法:
方法一:使用declare命令
这是bash中最安全可靠的方式,支持动态生成变量名并完成赋值:
i=1 declare "var_$i=true" echo "$var_1" # 输出true
方法二:使用eval命令
eval会将字符串解析为命令执行,注意如果变量值来自不可信输入,存在注入风险,需谨慎使用:
i=1 eval "var_$i=true" echo "$var_1" # 输出true
方法三:使用关联数组(推荐)
如果场景允许,用关联数组替代动态变量名会更清晰易维护,避免变量名混乱:
# 声明关联数组 declare -A var_map i=1 # 用数字作为键 var_map[$i]=true echo "${var_map[$i]}" # 输出true # 也可以直接用"var_$i"作为键,和你原本的变量名形式对应 var_map["var_$i"]=true echo "${var_map["var_$i"]}" # 输出true
内容的提问来源于stack exchange,提问作者Muhammad Mekayel Anik
相关产品推荐
相关产品推荐

