为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2021-04-12 17:14:02
我所拥有的是带有一些变量的数组。我可以反复获取这些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


查看完整回答
反对 回复 2021-04-16
?
当年话下

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的用例。


查看完整回答
反对 回复 2021-04-16
  • 2 回答
  • 0 关注
  • 389 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信