我有两个不同长度的数组,并将两个数组传递给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循环中提取这样的数组名称?
答案 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