我正在编写一个程序并试图分解存储在数组中的数据,以使其运行得更快。 我试图这样做:
data_to_analyze=(1 2 3 4 5 6 7 8 9 10)
#original array size
dataSize=(${#data_to_analyze[@]})
#half of that size
let samSmall="$dataSize/2"
#the other half
let samSmall2=("$dataSize - $samSmall -1")
#the first half
smallArray=("${data_to_analyze[@]:0:$samSmall}")
#the rest
smallArray2=("${data_to_analyze[@]:$samSmall:$samSmall2}")
#an array of names(which correspond to arrays)
combArray=(smallArray smallArray2)
sizeComb=(${#combArray[@]})
#for the length of the new array
for ((i=0; i<= $sizeComb ; i++)); do
#through first set of data and then loop back around for the second arrays data?
for sample_name in ${combArray[i]}; do
command
wait
command
wait
done
我认为这样做首先只给出for循环的第一个数据数组。第一个数组完成后,应该再次使用第二个数组。
这让我有两个问题。 combArray真的通过了两个较小的数组吗?还有更好的方法吗?
答案 0 :(得分:5)
您可以创建一个看起来像数组引用的字符串,然后使用它来间接访问引用数组的元素。它甚至适用于包含空格的元素!
combArray=(smallArray smallArray2)
for array in "${combArray[@]}"
do
indirect=$array[@] # make a string that sort of looks like an array reference
for element in "${!indirect}"
do
echo "Element: $element"
done
done
答案 1 :(得分:0)
#!/bin/bash
data_to_analyze=(1 2 3 4 5 6 7 8 9 10)
dataSize=${#data_to_analyze[@]}
((samSmall=dataSize/2,samSmall2=dataSize-samSmall))
smallArray=("${data_to_analyze[@]:0:$samSmall}")
smallArray2=("${data_to_analyze[@]:$samSmall:$samSmall2}")
combArray=(smallArray smallArray2)
sizeComb=${#combArray[@]}
for ((i=0;i<$sizeComb;i++));do
eval 'a=("${'${combArray[i]}'[@]}")'
for sample_name in "${a[@]}";do
...
done
done
编辑:删除$ {combArray [i]}附近的双引号并替换&lt; = by&lt; in for