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