在 bash 中将一个命令替换到另一个命令的参数列表中

Substituting a command into the parameter list of another command in bash

我有一个 bash 脚本,通常是这样工作的:

[...]
file=
docommand $x $y $file $z

但我想向脚本添加一个选项,告诉它使用 anonymous named pipe 而不是文件从命令中获取数据。 也就是说,我想做一些近似于

的事情
file=<(anothercmd arg1  arg3)

还有我的

docommand $x $y $file $z

扩展到

 docommand $x $y <(anothercmd arg1  arg3) $z

有没有办法获得正确的引用来实现这一点?

对于更具体的上下文,脚本查看回归测试的输出产品,通常将它们与具有预期输出的文件区分开来。我想有选择地将修订和差异传递给当时预期的结果,因此 diff $from $to 将扩展为 diff <(hg cat -r $fromrev $from) $to.

使用评估:

eval docommand $x $y <(anothercmd arg1  arg3) $z

例子

$ f='<(ps)'
$ echo $f
<(ps)
$ cat $f
cat: '<(ps)': No such file or directory
$ eval cat $f
  PID TTY          TIME CMD
 4468 pts/8    00:00:00 mksh
 4510 pts/8    00:00:00 bash
 4975 pts/8    00:00:00 bash
 4976 pts/8    00:00:00 cat
 4977 pts/8    00:00:00 ps
$