【发布时间】:2021-09-02 14:49:25
【问题描述】:
我有一个脚本,我反复想对这样的命令的退出状态做出反应(这是一种简化形式):
function f() {
command1 $x $y && echo OK || return 1
#...
commandN $z $t && echo OK || return 1
}
有没有一种简单的方法可以将其抽象出来? 我在想一些类似的东西
function runme(){
$@ && echo OK || return 1
}
function f(){
runme command1 $x $y
#...
}
当然return 只适用于runme 函数本身,并且
不会从f 返回。
我也无法将'set -e'设置为work as I expected in all cases
有没有一种简单的方法可以用纯 bash 抽象出这个 if-else?
【问题讨论】:
-
当你想要的是
if a; then b; else c; fi时不要使用a && b || c。它们不是 100% 相同的,极端情况(a成功但b失败,所以c被运行)可能会搞砸你。 -
另外,
$@和"$@"也不一样。 始终使用引号,否则您的行为与(未引用的)$*相同。 -
另外,
function f() { ... }正在以与 either POSIX sh f() { ... } 和旧式 ksh 语法function f { ... }>或旧版ksh。除非您有 非常 很好的理由不这样做,否则请不要使用function关键字,而只需使用 POSIX 声明语法。 -
@KamilCuk 我要返回1,即中断当前函数,而不是整个脚本
-
顺便说一句,我强烈建议在决定考虑使用
set -e之前阅读BashFAQ #105(至少练习部分,如果你没有时间/耐心看寓言)。