итерация двух значений для цикла for в bash [duplicate]

Вместо использования ^ используйте функцию «pow», которая является предопределенной функцией, которая выполняет операцию Power, и ее можно использовать, включив заголовочный файл math.h.

^ Этот символ выполняет операцию BIT-WISE XOR в C, C ++.

Замените a^i на pow(a,i).

54
задан Gilles 2 July 2013 в 11:01
поделиться

3 ответа

Вам нужен цикл над массивом & amp; array2

i=0
while [ $i -lt ${#array[*]} ]; do
    echo ${array[$i]} is in ${array2[$i]}
    i=$(( $i + 1));
done

Vietnam is in Asia
Germany is in Europe
Argentina is in America

В качестве альтернативы вы можете использовать эту опцию (без цикла):

paste <(tr ' ' '\n' <<< ${array[*]}) <(tr ' ' '\n' <<< ${array2[*]}) | sed 's/\t/ is in /'
12
ответ дан anishsane 4 September 2018 в 09:16
поделиться

Если все массивы упорядочены правильно, просто обходите индекс.

array=(
  Vietnam
  Germany
  Argentina
)
array2=(
  Asia
  Europe
  America
)

for index in ${!array[*]}; do 
  echo "${array[$index]} is in ${array2[$index]}"
done

Vietnam is in Asia
Germany is in Europe
Argentina is in America
15
ответ дан cthomaspdx 4 September 2018 в 09:16
поделиться

Из ответа anishsane и комментариев в нем мы теперь знаем, чего вы хотите. Вот то же самое в стиле bashier , используя цикл for. См. Раздел Looping Constructs в справочном руководстве . Я также использую printf вместо echo.

#!/bin/bash

array=( "Vietnam" "Germany" "Argentina" )
array2=( "Asia" "Europe" "America" )

for ((i=0;i<${#array[@]};++i)); do
    printf "%s is in %s\n" "${array[i]}" "${array2[i]}"
done

Еще одна возможность - использовать ассоциативный массив:

#!/bin/bash

declare -A continent

continent[Vietnam]=Asia
continent[Germany]=Europe
continent[Argentina]=America

for c in "${!continent[@]}"; do
    printf "%s is in %s\n" "$c" "${continent[$c]}"
done

В зависимости от того, что вы хотите сделайте, вы могли бы также рассмотреть эту вторую возможность. Но обратите внимание, что вам нелегко будет контролировать порядок, когда поля отображаются во второй возможности (ну, это ассоциативный массив, так что это не удивительно).

71
ответ дан gniourf_gniourf 4 September 2018 в 09:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: