在shell脚本中创建动态变量,并引用存储在动态变量中的值

您所在的位置:网站首页 linux如何打印变量aaa的值 在shell脚本中创建动态变量,并引用存储在动态变量中的值

在shell脚本中创建动态变量,并引用存储在动态变量中的值

2024-07-15 06:04| 来源: 网络整理| 查看: 265

Contents 1. 要求:动态创建变量名,并引用动态变量名2. 实现:2种方式2.1. 指针变量的形式(Pointer Variable)2.2. 数组的形式(Array) 3. References

1. 要求:动态创建变量名,并引用动态变量名

在shell脚本中动态生成一组变量名,并引用生成的变量名。示例如下:

var_$n=$n+2,最终得到如下表达式 var_1=3 var_2=5 var_3=7

2. 实现:2种方式

下面分别使用指针变量(Pointer Variable)以及数组的形式实现动态创建变量的需求。

2.1. 指针变量的形式(Pointer Variable)

使用指针变量的形式,就是使用一个中间变量保存动态生成的变量名,这样一来,就将赋值操作从此前的等号左边搬到了等号右边。然后对指针变量进行赋值,以及引用指针变量获取变量值。 具体示例如下所示:

# 动态变量名 # 1. 利用declare结合${!variable}的方式定义动态变量并提取动态变量名 echo '================= declare ====================' for n in `seq 5` do var_name=var_$n declare $var_name='hello world'+$n echo $var_name # 取变量名 echo ${!var_name} # 取变量值 done echo '================= declare 1 ====================' # 1的变体 for n in `seq 5` do declare var_$n='hello world'+$n var_name=var_$n echo $var_name # 取变量名 echo ${!var_name} # 取变量值 done

上述脚本的执行结果如下所示:

[root@c7u6s8:test]# bash test.sh ================= declare ==================== var_1 hello world+1 var_2 hello world+2 var_3 hello world+3 var_4 hello world+4 var_5 hello world+5 ================= declare 1 ==================== var_1 hello world+1 var_2 hello world+2 var_3 hello world+3 var_4 hello world+4 var_5 hello world+5

注意: 在引用动态变量所存储的值的时候,需要注意不要省略大括号中的感叹号,否则就变成了打印动态变量名,而不是动态变量名所保存的值。

2.2. 数组的形式(Array)

在shell中的数组,支持关联数组和索引数组,两者的定义方式类似,实际使用上,在此处是可以通用的。具体如下所示:

echo '================= Associate Array ====================' # 2. 关联数组(associate array)或者索引数组实现动态变量名 # declare -A dynamic_var_arr=() # 定义关联数组 declare -a dynamic_var_arr=() # 定义索引数组 for n in `seq 5` do dynamic_var_arr[$n]='hello world'_$n echo '数组中的值' ${dynamic_var_arr[$n]} echo '数组长度' ${#dynamic_var_arr[*]} echo '获取数组中的索引下标' ${!dynamic_var_arr[@]} echo '数组中所有的值' ${dynamic_var_arr[@]} # 下面的方式获取数组中的内容 var=dynamic_var_arr[$n] echo ${!var} echo '-----' done

上述输出的结果如下所示:

================= Associate Array ==================== 数组中的值 hello world_1 数组长度 1 获取数组中的索引下标 1 数组中所有的值 hello world_1 hello world_1 ----- 数组中的值 hello world_2 数组长度 2 获取数组中的索引下标 1 2 数组中所有的值 hello world_1 hello world_2 hello world_2 ----- 数组中的值 hello world_3 数组长度 3 获取数组中的索引下标 1 2 3 数组中所有的值 hello world_1 hello world_2 hello world_3 hello world_3 ----- 数组中的值 hello world_4 数组长度 4 获取数组中的索引下标 1 2 3 4 数组中所有的值 hello world_1 hello world_2 hello world_3 hello world_4 hello world_4 ----- 数组中的值 hello world_5 数组长度 5 获取数组中的索引下标 1 2 3 4 5 数组中所有的值 hello world_1 hello world_2 hello world_3 hello world_4 hello world_5 hello world_5 ----- 3. References

[1]. Dynamic variable names in Bash



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3