猿问

在bash中遍历数组时获取变量名

我所拥有的是带有一些变量的数组。我可以反复获取这些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


MMMHUHU
浏览 390回答 2
2回答

慕村225694

听起来您想要一个关联数组。# to set values over timedeclare -A Array=( ) || { echo "ERROR: Need bash 4.0 or newer" >&2; exit 1; }Array[var1]=1Array[var2]=2Array[var3]=3也可以一次分配:# or as just one assignmentdeclare -A Array=( [var1]=1 [var2]=2 [var3]=3 )无论哪种方式,都可以使用来遍历键"${!Array[@]}",并使用来检索键的值${Array[key]}:for var in "${!Array[@]}"; do&nbsp; val="${Array[$var]}"&nbsp; echo "$var -> $val"done...在完成任何一项分配之后,将正确发出:var1 -> 1var2 -> 2var3 -> 3

当年话下

那这个解决方案呢?#!/bin/bashvar1=$'1'var2=$'2'var3=$'3'Array=( var1 var2 var3 )for var in "${Array[@]}"; do&nbsp; echo "$var = ${!var}"done这个想法只是将您的变量名放入数组中,然后依靠Bash的间接功能。但正如@CharlesDuffy指出的那样,关联数组的使用听起来更好地适应了OP的用例。
随时随地看视频慕课网APP
我要回答