使用数组比较 bash 中的负值

使用数组比较 bash 中的负值

我确实有一个有趣的问题正在尝试解决,但我还无法做到。

假设我有 2 个数组。

数组一:

1 -2 3 -2 2 -4

数组二:

-2 -3 4 5 2 -5

我希望能够实际比较Array one和的第 i 个值Array two

  • 如果两者都是负数那么我会输入Array Three 0
  • 如果他们都是积极的,我会添加一个1
  • 如果它们是相反的,我需要插入一个2

输出:

2 0 1 2 1 0 

我怎样才能做到这一点 ?

答案1

如果您熟悉 C、C++ 或 Java,那么您也会发现bashs 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[@]}"

这也适用于ksh93shell,从中bash获得了许多功能。

答案2

直接的方法:

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 ' ' -

相关内容