Poniżej znajduje się mój kod, mam dwie tablice ... array i array2.
#!/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
Chcę, aby po uruchomieniu skryptu wyświetliło się następujące wyjście na moją konsolę:
1
2
3
4
5
6
7
8
9
A
Zamiast tego otrzymuję:
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
Naprawdę staram się osiągnąć następujące poprzez zagnieżdżone pętle jak w 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;
}
Ale w jaki sposób mogę użyć tego samego iteratora var i do sterowania dwoma różnymi tablicami?
Odpowiedzi:
5 dla odpowiedzi № 1Zapętlić indeksy zamiast elementów:
#!/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 dla odpowiedzi nr 2
Bardziej lub mniej dokładna transkrypcja kodu c ++ byłaby
for i in {0..5}
do
echo ${array[$i]}
echo ${array2[$i]}
done
1 dla odpowiedzi nr 3
Aby dodać kolejny algorytm, możesz wielokrotnie drukować pierwszy element każdej tablicy i wysuwać je, dopóki pierwszy nie będzie pusty:
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
edit: To niszczy tablice, więc używaj go tylko wtedy, gdy nie dbasz o tablice istniejące po pętli.