在 shell 脚本中使用带括号的命令,例如 diff

Use commands with parentheses like diff in shell script

我想比较 2 个命令的输出结果

差异输出来自 cat 文件 1cat 文件 2

我发现解决方案是

diff <(cat file1) <(cat file2)

但是

如果我把这个放在shell脚本中 无法识别括号,因为它意味着在 shell 脚本中调用 sub-shell..(我想知道我所知道的是否正确)

#!bin/bash
diff <(cat ) <(cat )

意外标记`('附近的语法错误

在 shell 脚本中使用需要括号的命令有什么解决方案吗?

我试过了

 diff `<(cat ) <(cat )`
 diff `<(cat )` `<(cat )`
 diff "<(cat ) <(cat )"
 diff <`(`cat `)` <`(`cat `)`

但是上面的none有效

我曾经将输出转储到其他文件并比较这些文件

cat  > out1.txt
cat  > out2.txt
diff -b out1.txt out2.txt

我知道这可行,但我只想知道是否有任何方法可以不事先将输出转储到文件

我尝试了这个 test.sh 并获得了正确的输出。

#! /bin/bash
diff <(cat ) <(cat )

如果您编写的脚本包含 bash 命令,则需要 运行 使用 bash 而不是 sh。 (考虑:您是否期望 rm scriptfile 到 运行 文件中包含的 bash 命令?)

如果你想要更便携的东西,你可以明确地使用 FIFO(特别是 mkfifo 命令):

#!/bin/sh

mkfifo fifo1 fifo2
cat "" >>fifo1 &
cat "" >>fifo2 &
diff -b fifo1 fifo2
rm fifo1 fifo2