首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash和ash括号的差异

bash和ash括号的差异
EN

Stack Overflow用户
提问于 2015-06-11 13:18:56
回答 3查看 1.5K关注 0票数 1

我试图使用diff命令来比较目录清单,这在bash中运行得很好:

代码语言:javascript
复制
diff  <(cd alpha ; find . -type f) <(cd beta; find . -type f)

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

代码语言:javascript
复制
-ash: syntax error: unexpected "("

在读取输入运算符<或圆括号( )方面有什么不同吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-11 13:28:33

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

代码语言:javascript
复制
$ cat < <( echo hi )
hi

你也可以

代码语言:javascript
复制
$ echo <( : )
/dev/fd/63

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

过程替代是bash特性。它不是POSIX规范的一部分,也不像灰一样存在于外壳中。另一方面,重定向是POSIX。

票数 3
EN

Stack Overflow用户

发布于 2015-06-11 13:26:51

<(command)语法是过程替代ash shell (和其他限制/等shell)不支持它。

票数 2
EN

Stack Overflow用户

发布于 2021-10-27 13:05:25

我认为这是最紧凑和最容易理解的解决办法:

代码语言:javascript
复制
#!/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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30781969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档