1

我试图使用 diff 命令来比较在 bash 中运行良好的目录列表:

diff  <(cd alpha ; find . -type f) <(cd beta; find . -type f)

但是,在灰烬(没有其他外壳可用的嵌入式设备)上,我得到了

-ash: syntax error: unexpected "("

关于读取输入运算符<或括号有什么区别( )吗?

4

3 回答 3

3

不要将尖括号<( … )与重定向中的尖括号混淆,例如cat < file. 在 bash 中,<( echo hi )实际上是一个内容为“hi”的文件(至少用于阅读目的)。所以你可以做

$ cat < <( echo hi )
hi

你也可以做

$ echo <( : )
/dev/fd/63

而shell实际上将该进程替换扩展为一个文件名。

进程替换是 bash 功能。它不是POSIX 规范的一部分,也不存在于像 ash 这样的 shell 中。另一方面,重定向是 POSIX。

于 2015-06-11T13:28:33.660 回答
2

<(command)语法是Process Substitution,并且不受ashshell(和其他受限/等 shell)的支持。

于 2015-06-11T13:26:51.037 回答
0

我发现这是最紧凑和最容易理解的解决方案:

#!/bin/sh
diff /dev/fd/3 3<<-EOF /dev/fd/4 4<<-EOF
$(sort file1)
EOF
$(sort file2)
EOF

参考:https ://unix.stackexchange.com/a/639752/137528

于 2021-10-27T13:05:25.253 回答