Сравнение отрицательных значений в bash с использованием массивов

У меня есть интересная проблема, которую я пытаюсь решить, но я пока не могу этого сделать.

Предположим, что у меня есть 2 массива.

Массив:

1 -2 3 -2 2 -4 

Массив 2:

 -2 -3 4 5 2 -5 

Я хочу иметь возможность реально сравнить i-е значение как Array one и Array two :

  • Если оба отрицательные, я бы ввел в Array Three 0
  • Если они оба положительные, я добавлю 1
  • Если они противоположности, мне нужно вставить 2

Вывод:

 2 0 1 2 1 0 

Как я могу это сделать ?

  • как получить доступ к следующему аргументу параметров командной строки в bash?
  • Bash, когда нужно использовать $ @, "$ @" и $ {1 + "$ @"}
  • bash: предупреждение: уровень оболочки (1000) слишком высокий, сброс до 1
  • Как передать переменную в параллельный скрипт из текстового файла по строкам
  • какой аргумент hash -t требует?
  • корневая оболочка не использует --color = auto
  • объявить: «дополнительные атрибуты не вступают в силу до последующих присвоений»
  • Сепаратор между списком команд и}
  • 2 Solutions collect form web for “Сравнение отрицательных значений в bash с использованием массивов”

    Если вы знакомы с C, C ++ или Java, то вы найдете этот вариант bash 's for -loop довольно знакомым тоже. bash выполняет арифметическую оценку с помощью (( ... )) поэтому мы будем использовать это при сравнении значений:

     array1=( 1 -2 3 -2 2 -4 ) array2=( -2 -3 4 5 2 -5 ) array3=( ) for (( i=0; i < ${#array1[@]}; ++i )); do if (( array1[i] < 0 && array2[i] < 0 )); then array3[$i]=0 elif (( array1[i] > 0 && array2[i] > 0 )); then array3[$i]=1 else array3[$i]=2 fi done echo "${array3[@]}" 

    Это также хорошо работает с оболочкой ksh93 , из которой bash получил множество своих функций.

    Прямой путь:

     arr1=(1 -2 3 -2 2 -4) arr2=(-2 -3 4 5 2 -5) i=0 while [[ "$i" -lt "${#arr1[@]}" ]]; do a=$(( ${arr1[$i]} * ${arr2[$i]} )) if [[ "$a" -lt 0 ]]; then echo 2 else if [[ "${arr1[$i]}" -gt 0 ]]; then echo 1 else echo 0 fi fi : "$((i = i + 1))" done | paste -sd ' ' - 
    Linux и Unix - лучшая ОС в мире.