我有一个具有 Perl 风格的“或死”的 Bash 函数。例如,
#!/bin/bash
func1 () {
local val
val=`cat foobar` || exit 7
echo "func1: cat returns $?"
}
myval=`func1`
echo "Line X should not be reached (retn = $? val = $myval)"
myval=$(func1)
echo "Line Y should not be reached (retn = $? val = $myval)"
func1
echo "Line Z should not be reached (retn = $?)"
直接调用函数让我利用exit
. 但是,如果该函数返回一个我想使用的值,则命令替换不适用于exit
. 即exit只存入返回值$?
,执行下一行。
使用调试选项运行-x
似乎意味着命令替换类似于子shell,因为 bash 为它输出更深的嵌套。因此,exit
不适用于主脚本。
样本输出:
cat: foobar: No such file or directory
Line X should not be reached (retn = 7 val = )
cat: foobar: No such file or directory
Line Y should not be reached (retn = 7 val = )
cat: foobar: No such file or directory
有没有办法调用 func1 并使用它的输出(在变量、循环、if 等中),同时仍然利用短路exit
?