我试图使用diff命令来比较目录清单,这在bash中运行得很好:
diff <(cd alpha ; find . -type f) <(cd beta; find . -type f)但是,在灰(没有其他shell可用的嵌入式设备)上,我得到了
-ash: syntax error: unexpected "("在读取输入运算符<或圆括号( )方面有什么不同吗?
发布于 2015-06-11 13:28:33
不要将<( … )中的角括号与重定向(如cat < file )中的角括号混淆。在bash中,<( echo hi )实际上是一个内容为"hi“的文件(至少用于阅读目的)。所以你可以
$ cat < <( echo hi )
hi你也可以
$ echo <( : )
/dev/fd/63而shell实际上将进程替换扩展为文件名。
过程替代是bash特性。它不是POSIX规范的一部分,也不像灰一样存在于外壳中。另一方面,重定向是POSIX。
发布于 2015-06-11 13:26:51
<(command)语法是过程替代,ash shell (和其他限制/等shell)不支持它。
发布于 2021-10-27 13:05:25
我认为这是最紧凑和最容易理解的解决办法:
#!/bin/sh
diff /dev/fd/3 3<<-EOF /dev/fd/4 4<<-EOF
$(sort file1)
EOF
$(sort file2)
EOFhttps://stackoverflow.com/questions/30781969
复制相似问题