如何将 bash < 运算符与 diff 一起使用?

如何将 bash < 运算符与 diff 一起使用?

请注意:

$ diff <(echo a) <<<b
diff: missing operand after '/dev/fd/63'
diff: Try 'diff --help' for more information.

我知道<(...)效果很好:

$ diff <(echo a) <(echo b)
1c1
< a
---
> b

我也知道<<<一般情况下效果很好:

$ cat <<<a
a

那么正确的调用方法是什么diff

答案1

diff命令期望文件名参数,而此处的字符串<<<写入标准输入。然而却man diff告诉我们

如果 FILE 为“-”,则读取标准输入。

所以

$ diff <(echo a) - <<<b
1c1
< a
---
> b

这同样适用于这里文档:

$ diff <(echo a) - << \EOF
b
EOF
1c1
< a
---
> b

答案2

在具有/dev/fd/x设备的系统上,您可以执行以下操作:

diff /dev/fd/3 3<< EOF3 /dev/fd/4 4<< EOF4
some text
EOF3
some other text
EOF4

使用 Bourne shell 的<<此处文档重定向运算符。

diff /dev/fd/3 3<<< 'some text' /dev/fd/4 4<<< 'some other text'

使用 zsh 的<<<此处字符串重定向运算符。

在 zsh 中,您还可以执行以下操作:

diff <(<<<'some text') <(<<<'some other text')

答案3

您可以<()结合cat <<<

diff <(echo a) <(cat <<<b)

如果您只需要使用<<<一个参数,Steeldriver 的答案很有效,但如果您需要同时使用这两个参数,则这将有效:

diff <(cat <<<a) <(cat <<<b)

但尚不清楚为什么您需要一个here-string。<(cat <<<a)和之间差别不大<(echo a)

相关内容