模数值语法在云中失败

时间:2019-04-29 20:23:18

标签: bash

我尝试了一种实现互联网最大线程的实现方式。我尝试过:

#!/bin/bash
echo "$BASH_VERSION"
echo "$-"
processes=4
i=0
((i=i%$processes)); ((i++==0)) && wait

此操作失败,在aws的DNANexus平台上没有任何错误消息。另一方面,当我将其重写为:

#!/bin/bash
echo "$BASH_VERSION"
echo "$-"
processes=4
i=0
(( ++i % $processes == 0 )) && wait

该代码有效。 bash版本为4.3.11(1)-release,外壳标志为ehB

任何人都可以尝试猜测为什么会在云上发生这种情况,而在OsX和Ubuntu 18.04本地版本中两个版本都能正常工作吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是set -e的操作,该标志也称为errexit

在以下情况下:

((i=i%$processes)); ((i++==0)) && wait

...命令(( i++ == 0 ))被视为有条件的命令,因此避免了errexit通常由(( i++ == 0 ))引起的非零退出状态中止的行为,对于{{ 1}},而不是(( i=i%$processes )),在bash版本中,bash没有明确的例外,不会受到set -e行为的影响。


请参阅BashFAQ #105,练习2。