【发布时间】:2012-07-18 18:53:09
【问题描述】:
我正在尝试编写代码来将一个大数组分解为许多不同的小数组。最终我将通过的数组是一个未知大小的数组,这只是我的测试对象。我已经做到了这一点:
#!/bin/bash
num=(10 3 12 3 4 4)
inArray=${#num[@]}
numArrays=$(($inArray/2))
remain=$(($inArray%2))
echo $numArrays
echo $remain
nun=0
if test $remain -gt $nun; then
numArrays=$(($numArrays+1))
fi
array=(1 2)
j=0
for ((i=0;i<$numArrays;i++, j=j+2)); do
array=("${num[@]:$j:2}")
echo "The array says: ${array[@]}"
echo "The size? ${#array[@]}"
done
我真正遇到的问题是:我想让变量“数组”每次都能稍微更改名称,因此每个数组都被保留并在循环后具有唯一的名称。我曾尝试将名称命名为 array_$i 但返回:
[Stephanie@~]$ ./tmp.sh
3
0
./tmp.sh: line 16: syntax error near unexpected token `"${num[@]:$j:2}"'
./tmp.sh: line 16: ` array_$i=("${num[@]:$j:2}")'
[Stephanie@RDT00069 ~]$ ./tmp.sh
3
0
./tmp.sh: line 16: syntax error near unexpected token `$i'
./tmp.sh: line 16: ` array($i)=("${num[@]:$j:2}")'
有人有什么建议吗? 谢谢
【问题讨论】:
-
我认为
eval可能是您想要的:如eval "array_$i=(\"${num[@]:$j:2}\")"。不过,不确定那里的引用是否正确-您可能需要稍微摆弄一下。 -
顺便说一句,
if test $remain…块可以写成(( numArrays+=(remain>0?1:0) ))或(( numArrays+=(remain>0) ))。 -
@kojiro 谢谢!我对 bash 还很陌生,所以很高兴看到如何更雄辩地使用代码
标签: arrays bash loops iteration