条件表达式中“ set -e”下“ eval”的行为
考虑命令 eval false || echo ok echo also ok 通常,我们希望它能够执行该false实用程序,并且由于退出状态为非零,因此可以执行echo ok和echo also ok。 在所有的类POSIX我用贝壳(ksh93,zsh,bash,dash,OpenBSD的ksh,和yash),这是发生了什么,但事情变得有趣的,如果我们能set -e。 如果set -e有效,则执行时,OpenBSD sh和kshshell(均从派生pdksh)将终止脚本eval。没有其他外壳可以做到这一点。 POSIX说特殊的内置实用程序(例如eval)中的错误应导致非交互式外壳终止。我不确定执行是否false构成“错误”(如果确实如此,它将独立于set -e活动状态)。 解决此问题的方法似乎是将evalin 放在子shell中, ( eval false ) || echo ok echo also ok 问题是,是否应该在POSIX正确的shell脚本中执行此操作,还是在OpenBSD的shell中出现错误?另外,上面链接到的POSIX文本中的“错误”是什么意思? 额外的信息:OpenBSD Shell将 在命令中echo ok使用和不使用两者set -e eval ! true || echo ok 我的原始代码看起来像 set -e if eval "$string"; …