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

mar*_*ark 7 bash here-string

请注意:

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

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

$ diff <(echo a) <(echo b)
1c1
< a
---
> b
Run Code Online (Sandbox Code Playgroud)

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

$ cat <<<a
a
Run Code Online (Sandbox Code Playgroud)

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

ste*_*ver 30

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

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

所以

$ diff <(echo a) - <<<b
1c1
< a
---
> b
Run Code Online (Sandbox Code Playgroud)

这同样适用于此处的文档

$ diff <(echo a) - << \EOF
b
EOF
1c1
< a
---
> b
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 11

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

diff /dev/fd/3 3<< EOF3 /dev/fd/4 4<< EOF4
some text
EOF3
some other text
EOF4
Run Code Online (Sandbox Code Playgroud)

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

diff /dev/fd/3 3<<< 'some text' /dev/fd/4 4<<< 'some other text'
Run Code Online (Sandbox Code Playgroud)

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

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

diff <(<<<'some text') <(<<<'some other text')
Run Code Online (Sandbox Code Playgroud)