请注意:
$ 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)