我有以下功能.
hello () {
echo "Hello"
}
func () {
hello
echo "world"
}
Run Code Online (Sandbox Code Playgroud)
如果我不希望打印hello函数的输出但想要对它做一些事情,我想在某个变量中捕获输出,唯一可能的方法是分叉子shell,如下所示?这不是一个不必要的新子进程创建吗?这可以优化吗?
func () {
local Var=$(hello)
echo "${Var/e/E} world"
}
Run Code Online (Sandbox Code Playgroud)
一个丑陋的解决方案是临时替换,echo以便它设置一个全局变量,您可以从函数中访问该变量:
func () {
echo () {
result="$@"
}
result=
hello
unset -f echo
echo "Result is $result"
}
Run Code Online (Sandbox Code Playgroud)
我同意这很令人讨厌,但避免使用 subshell。