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