说我有2个文件(foo
和bar
),我想比较它们。通过文件大括号扩展,我可以执行以下任一操作,并获得相同的结果:
diff foo bar
diff {foo,bar}
现在让我们说我想在对它们进行比较之前对它们进行快速排序。使用进程替换,我可以执行以下命令:
diff <(sort foo) <(sort bar)
我想做的就是以某种方式缩短此时间。我在想像这样的东西:
diff <(sort {foo,bar})
但是不幸的是,这不起作用。有任何想法吗?我很乐意完全犯错误。
答案 0 :(得分:2)
Diff需要2个文件名才能工作。 <()
返回该进程的标准输出的文件描述符;基本上,您的stdout临时是一个文件,并且diff读取这2个文件并进行比较。 <()
只能返回1个文件描述符,无论您在其中推送了多少命令。他们所有的标准输出都放在同一个地方,无法区分两者。这是设计使然。
如果您真的认为diff <(sort foo) <(sort bar)
太多了,可以写
h() {
diff <(sort $1) <(sort $2)
}
然后执行h {foo,bar}
答案 1 :(得分:1)
{foo,bar}
的扩展仅计算为一系列连续的标记。您正在寻找的是对一系列输入重复相同的过程(sort
)。
提供的处理变得更加复杂和重复,您可以将其隐藏在函数中:
def process() {
echo ... $1 ...
}
diff <(process foo) <(process bar)
随着diff
参数数量的增加,您可以循环处理它们,将输出存储在临时文件中,然后将文件名数组扩展为diff参数。
总而言之,我看不到一种简化代码的方法(免除缩短变量或处理函数名称的要求)。