在 bash 中可以,但在 sh 中不行 - 转换 diff < (ls)

在 bash 中可以,但在 sh 中不行 - 转换 diff < (ls)

在 GNU Bash 中,diff <(df) <(ls)正在运行。
在 中sh,它没有运行。
我也试过了[[diff </bin/df <bin/ls]],仍然出错:

$ [[/usr/bin/diff < (/bin/ls) < (bin/df)]]
sh: 1: Syntax error: "(" unexpected
$ bash

有人知道相当于什么吗sh?非常感谢您的帮助。

答案1

没有直接等同于<(…) >(…)替换的东西——您需要手动创建命名管道作为替代:

mkfifo /tmp/lspipe
mkfifo /tmp/dfpipe
/bin/ls > /tmp/lspipe &
/bin/df > /tmp/dfpipe &
/usr/bin/diff /tmp/lspipe /tmp/dfpipe
rm /tmp/lspipe /tmp/dfpipe

(另请注意,在 Bash 中,<和之间的空格(…)。)

在这种情况下, 绝对没有意义[[…]]。它们不是用于分组命令,而是用于编写条件表达式(不要将它们与( )或混淆,后者用于分组命令)。它也是 Bash 特有的功能,但在正确使用的地方,可以用或{ }替换它。[ … ]expr

相关内容