繁体   English   中英

bash 和 ash 括号的区别

[英]Difference on bash and ash parentheses

我试图使用 diff 命令来比较在 bash 中工作正常的目录列表:

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

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

-ash: syntax error: unexpected "("

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

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

$ cat < <( echo hi )
hi

你也可以

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

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

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

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

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

#!/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM