我所拥有的是带有一些变量的数组。我可以反复获取这些var的值,但实际上我需要的是它们的名称(这些值将在其他地方使用)。使用var [i]无效,因为我将使用不同的名称。我想我可以通过使用名称创建另一个数组来解决此问题-类似于以下操作: 从Bash数组中列出的变量名称中获取变量值但是我想知道是否有更好的方法可以做到这一点。var1=$'1'var2=$'2'var3=$'3'Array=( $var1 $var2 $var3)for ((i=0; i<${#Array[@]}; i++))do echo ${Array[i]}done是:>1>2>3应该:>var1>var2>var3
2 回答
慕村225694
TA贡献1880条经验 获得超4个赞
听起来您想要一个关联数组。
# to set values over time
declare -A Array=( ) || { echo "ERROR: Need bash 4.0 or newer" >&2; exit 1; }
Array[var1]=1
Array[var2]=2
Array[var3]=3
也可以一次分配:
# or as just one assignment
declare -A Array=( [var1]=1 [var2]=2 [var3]=3 )
无论哪种方式,都可以使用来遍历键"${!Array[@]}",并使用来检索键的值${Array[key]}:
for var in "${!Array[@]}"; do
val="${Array[$var]}"
echo "$var -> $val"
done
...在完成任何一项分配之后,将正确发出:
var1 -> 1
var2 -> 2
var3 -> 3
当年话下
TA贡献1890条经验 获得超9个赞
那这个解决方案呢?
#!/bin/bash
var1=$'1'
var2=$'2'
var3=$'3'
Array=( var1 var2 var3 )
for var in "${Array[@]}"; do
echo "$var = ${!var}"
done
这个想法只是将您的变量名放入数组中,然后依靠Bash的间接功能。
但正如@CharlesDuffy指出的那样,关联数组的使用听起来更好地适应了OP的用例。
- 2 回答
- 0 关注
- 389 浏览
添加回答
举报
0/150
提交
取消