Bash函数是否可以将值输出到文件描述符,然后仅将其分配给变量?

我想模拟Bash函数的返回值,我想知道是否可以使用即席文件描述符来传递该值。

换句话说:

function myfunction {
  # print `stdout_value` to stdout
  # print `stderr_value` to stderr
  # print `return_value` to FD3 (or other)
}

# the values printed to stderr/stdout should be printed,but only
# `return_value` should be assigned to `myvalue`
myvalue=$(myfunction <FDs manipulation>)
tigergao000 回答:Bash函数是否可以将值输出到文件描述符,然后仅将其分配给变量?

是的。但是要使其正常工作,首先需要将stdout保存到另一个描述符中,以进行整个调用和命令替换。将3重定向到其stdout-这样可以捕获写入其中的内容-并将其stdout重定向到整个调用的stdout。例如:

{ myvalue=$(myfunction 3>&1 1>&4); } 4>&1

对于每次调用该函数执行此操作听起来都需要很多工作。您最好遵循以下约定:

  • 使用stderr报告错误,警告和调试信息(包括日志和提示),
  • 使用stdout来显示结果,
  • 并使用return语句表示总体成功/失败。
,

最简单的方法是首先创建stdout的全局副本。例如:

#!/bin/sh

exec 4>&1
myfunction() {
        echo stdout
        echo stderr >&2
        echo fd3 >&3
} 3>&1 1>&4


v=$(myfunction)   # assigns the string "fd3"
echo v="$v"
本文链接:https://www.f2er.com/3138274.html

大家都在问