使用数组比较 bash 中的负值

Jav*_*eak 3 bash

我确实有一个有趣的问题,我正在尝试解决,但我仍然无法这样做。

假设我有 2 个数组。

数组一:

1 -2 3 -2 2 -4
Run Code Online (Sandbox Code Playgroud)

数组二:

-2 -3 4 5 2 -5
Run Code Online (Sandbox Code Playgroud)

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

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

输出:

2 0 1 2 1 0 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点 ?

Kus*_*nda 6

如果您熟悉 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[@]}"
Run Code Online (Sandbox Code Playgroud)

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