首页 > 解决方案 > 将大括号扩展与过程替换相结合

问题描述

假设我有 2 个文件(foobar),我想区分它们。通过文件大括号扩展,我可以执行以下任一操作,并获得相同的结果:

diff foo bar
diff {foo,bar}

现在假设我想在区分这些文件之前快速对它们进行排序。使用进程替换,我可以执行以下操作:

diff <(sort foo) <(sort bar)

我想做的是以某种方式缩短它。我在想象这样的事情:

diff <(sort {foo,bar})

但不幸的是,这不起作用。有任何想法吗?我对自己的方法完全错误持开放态度。

标签: linuxbashshellzsh

解决方案


Diff 需要 2 个文件名才能工作。<()返回该进程的标准输出的文件描述符;基本上,您的 stdout 暂时是一个文件,并且 diff 读取这两个文件并进行比较。<()只能返回 1 个文件描述符,无论您在其中插入了多少命令。他们所有的标准输出都到同一个地方,没有办法区分他们两个。这是设计使然。

如果你真的觉得diff <(sort foo) <(sort bar)打字太多,你可以写

h() {
    diff <(sort $1) <(sort $2)
}

h {foo,bar}


推荐阅读