在Bash中,在循环遍历多个数组时获取数组的名称?

时间:2018-02-06 04:50:08

标签: bash

我有两个不同长度的数组,并将两个数组传递给while循环。在while循环中,我需要访问数组的名称。我可以把它写成一个函数,但是如果没有办法可以做到这一点我很好奇。

arr1=( "a" "b" "c" )
arr2=( "d" "e" "f" "g" )
for str in ${arr1[@]} ${arr2[@]}; do
  echo $str
  echo ${NAME_OF_ARRAY}
done

预期结果:

a
arr1
b
arr1
c
arr1
d
arr2
e
arr2
f
arr2
g
arr2

有没有办法从for循环中提取这样的数组名称?

1 个答案:

答案 0 :(得分:2)

不,你不能这样做。相反,使用bash 4.3或更新版本,循环遍历数组名称,使用namevar依次别名。

arr1=( "a" "b" "c" )
arr2=( "d" "e" "f" "g" )

for arr_name in arr1 arr2; do      # assign each array name to arr_name in turn
  declare -n arr_cur=$arr_name     # make arr_cur an alias for arr_name
  for str in "${arr_cur[@]}"; do   # iterate over "${arr_cur[@]}"
     echo "${arr_name} - ${str}"
  done
  unset -n arr_cur                 # revert that assignment
done

... properly emits

arr1 - a
arr1 - b
arr1 - c
arr2 - d
arr2 - e
arr2 - f
arr2 - g