使用预先指定的变量值定义for循环

时间:2013-12-23 08:57:29

标签: arrays unix for-loop

下面我粘贴了一小部分代码,其中涵盖了我的问题。我在Unix脚本中运行了三个for循环。第一个循环n只运行整数值。第二个循环k也会在整数值上运行,但我稍后会为kappa更改它以表示除以10的所有值,在这种情况下,范围为0:0.1:10

现在,我的问题涉及第三个循环。我是Unix编程的初学者,所以这可能是一个非常基本的问题,但我似乎无法弄明白。假设第三个循环覆盖预定义值的数组,即p=[0 1/15 1/12 1/10 2/15 1/6 1/5 1/4 1/3]。我已将jmax定义为9,但我不知道如何将这些对应的p值设置为此循环参数。基本上我只想设置一个包含这些值的数组然后分配它们,有人可以给我一些指示,如何做到这一点?

请注意:由于$j的其他用途,我必须完整地保留for循环的开头!

代码部分:

   for ((n=0;n<${nmax};n++)); do # first loop
       for ((k=0;k<${kmax};k++)); do # second loop
           for ((j=0;j<${jmax};j++)); do # third loop

               # specify you job ......
               kappa=$(echo "scale=10; ${k}/10" | bc -l)

非常感谢!

2 个答案:

答案 0 :(得分:1)

这是你如何创建一个数组并循环它:

# create an array
p=(0 1/15 1/12 1/10 2/15 1/6 1/5 1/4 1/3)

# loop over the elements in the array
for j in "${p[@]}"; do
   echo "$j"
done

请查看Advanced Bash-Scripting Guide的Arrays章节。

答案 1 :(得分:0)

如果您不需要为脚本特别需要数组,并且您的数组条目不包含空格字符,则可以使用更简单的解决方案:

# Assign all values that should be looped over to a normal string variable,
# with each value separated by a space
p="0 1/15 1/12 1/10 2/15 1/6 1/5 1/4 1/3"

# Loop over all values in p
for value in p; do
  # Access each value in p using $value
done