如何在bash中获得mod的结果的正号

Mik*_*ing 6 bash mod

当天真地在bash中使用mod命令时,残差会在负分子中得到错误的符号(在我看来):

如果我写:

for i in {-5..5}; do echo $(( $i % 3 )) ; done
Run Code Online (Sandbox Code Playgroud)

我得到输出(作为一行)

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

我如何实现"正确"的行为

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

Jon*_*ing 6

不要循环直到结果为正或启动 perl 或 python,请考虑以下内容:

for i in {-5..5}; do echo $(( (($i % 3) + 3) % 3)) ; done

这将产生 OP 所需的输出。

这是可行的,因为第一个模将把结果带入 -3 到 3 的范围内,加 3 会使结果在 0 到 6 的范围内,然后我们可以再次执行模(加 3 对此没有影响)。

一般来说:mod = ((a % b) + b) % b