关注此帖子
我有这个 bash 脚本,我期望它在点击时完全终止false
,但它却没有。我意识到我做的事情与链接的帖子略有不同。
#!/usr/bin/env bash
set -Eeuo pipefail
function thing() {
false
echo "thing1|thing2|thing3"
}
IFS='|' read -r one two three <<< "$(thing )"
echo "${one} ${two} ${three}"
echo "done"
输出:
thing1 thing2 thing3
done
理想情况下,我想在 zsh 中执行此操作,但我也遇到了我不想要的行为:
#!/usr/bin/env zsh
set -Eeuo pipefail
function thing() {
false
echo "thing1|thing2|thing3"
}
IFS='|' read -r one two three <<< "$(thing )"
echo "${one} ${two} ${three}"
echo "done"
输出:
done
如何实现这个功能?
一般来说,你永远不应该依赖
errexit
(https://mywiki.wooledge.org/BashFAQ/105)。对于这种特殊情况,我认为你不能使用 herestring,但你可以这样做:明确比含蓄更好,并且
... || exit 1
是一件美丽的事情。你可以做
但正如威廉在他的回答中所建议的那样,明确检查错误更好。