从循环调用的函数返回“继续”

从循环调用的函数返回“继续”

我目前正在重构一个已经慢慢失去控制的脚本。我正在尝试将重复分解为函数。但是,我有一个从循环中调用的重复测试,并希望它返回continue

Shellcheck 说

SC2104: In functions, use `return` instead of `continue`.

shellcheck wiki 说不要这样做。但有办法吗?

下面是一个例子:

#!/bin/sh

AFunction () {
    if [[ "${RED}" -lt 3 ]]; then
        echo "cont"
        continue
    else
        echo "nope"
    fi
}

for i in 1 2 3 4 5
do
    RED=${i}
    AFunction
    echo ${i}
done

这是输出:

cont
1
cont
2
nope
3
nope
4
nope
5

但我希望

cont
cont
nope
3
nope
4
nope
5

感谢大家迄今为止的回答。我已经很接近了,但现在有一个衍生问题。希望这样可以吗?

如果我结合使用 @sudodus 答案和 @alecxs 提示。我是否需要在函数末尾始终“返回”0?现在看起来是个好习惯,但是如果我不明确这样做,这是否意味着?

#!/bin/sh

AFunction () {
    ##Script doing loads of other stuff
    if [[ "${RED}" -lt 3 ]]; then
        echo "cont"
        ## This only happening because something has gone wrong
        return 1
    else
        echo "nope"
    fi
    ##Script doing loads of more stuff
}

for i in 1 2 3 4 5
do
    RED=${i}
    AFunction || continue
    echo ${i}
done

答案1

您可以将“return”与参数一起使用,如下所示,

#!/bin/bash

AFunction () {
    if [[ "${RED}" -lt 3 ]]; then
        echo "cont"
        return 1
    else
        echo "nope"
        return 0
    fi
}

for i in 1 2 3 4 5
do
    RED=${i}
    if AFunction
    then
    echo ${i}
    fi
done

答案2

#!/bin/sh

AFunction () {
    [ "${RED}" -lt 3 ]
}

for i in 1 2 3 4 5
do
    RED=${i}
    if AFunction
    then
      echo "cont"
    else
      echo "nope"
      echo ${i}
    fi
done

相关内容