BASH中如何实现数组动态赋值,变量更新时数组自动变化?
在BASH中实现动态更新的数组
BASH中的数组元素是静态存储的,你原代码里的数组arr在初始化时就把var当时的计算结果(4、5、6)存成了固定值,后续修改var不会改变已经存储的数组元素。要实现变量更新时数组自动同步,你可以用以下两种方式:
方法1:用函数动态生成数组
定义一个函数,每次需要数组时调用它,根据当前var的值重新计算数组元素:
var=5 # 定义生成数组的函数 get_dynamic_arr() { echo $((var - 1)) $var $((var + 1)) } # 第一次获取并输出数组 arr=($(get_dynamic_arr)) echo ${arr[@]} # 修改var后重新获取数组 var=10 arr=($(get_dynamic_arr)) echo ${arr[@]}
执行结果:
4 5 6 9 10 11
这种方式逻辑清晰,安全性高,是推荐的做法。
方法2:用eval动态展开表达式
如果不想每次重新赋值数组,可以把数组的生成表达式存在变量中,每次需要时用eval展开计算:
var=5 arr_expr='$((var-1)) $var $((var+1))' # 第一次输出 echo $(eval "$arr_expr") # 修改var后再次输出 var=10 echo $(eval "$arr_expr")
执行结果和上面一致,但eval会执行任意命令,若var或arr_expr被注入恶意内容会有风险,仅在可控场景下使用。
内容的提问来源于stack exchange,提问作者adamfingol
相关产品推荐
相关产品推荐

