Linux Bashrc为循环而烦恼

时间:2016-07-07 21:21:06

标签: arrays linux bash

下面是我的代码,我有两个数组......数组和数组2。

#!/bin/bash

array = (1 3 5 7 9)
array2 = (2 4 6 8 A)

for i in "${array[@]}" 
do
  echo $i
  for i in "${array2[@]}" 
  do 
    echo $i
  done
done

我希望在运行脚本时将以下输出回显到我的控制台:

1
2
3
4
5
6
7
8
9
A

但我得到以下内容:

1
2
4
6
8
A
3
2
4
6
8
A
5
2
4
6
8
A
7
2
4
6
8
A
9
2
4
6
8
A

我真的想通过嵌套循环来完成以下任务,就像在C / C ++中一样:

char array[5] = {1, 3, 5, 7, 9};
char array2[5] = {2, 4, 6, 8, A};

for (int i=0; i<5; i++){
  std::cout << array[i] << std::endl;
  std::cout << array2[i] << std::endl;  
}

但是如何使用相同的迭代器var i来控制两个不同的数组呢?

3 个答案:

答案 0 :(得分:5)

循环索引而不是元素:

#!/bin/bash

array=(1 3 5 7 9)
array2=(2 4 6 8 A)

for i in "${!array[@]}" 
do
  echo "${array[i]}"
  echo "${array2[i]}"
done

答案 1 :(得分:1)

c ++代码的或多或少精确的转录将是

for i in {0..5}
do
  echo ${array[$i]}
  echo ${array2[$i]}
done

答案 2 :(得分:1)

要添加其他算法,您可以重复打印每个数组的第一个元素并弹出它们,直到第一个元素为空:

array=(1 3 5 7 9)
array2=(2 4 6 8 A)

while [ -n "$array" ]
do
    echo ${array[0]}
    echo ${array2[0]}
    array=("${array[@]:1}")
    array2=("${array2[@]:1}")
done

编辑:这会破坏数组,所以只有在你不关心循环后存在的数组时才使用它。