亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 418 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號