使用 diff 命令比较两个字符串?

Wol*_*olf 3 linux diff string

根据https://www.computerhope.com/unix/udiff.htm

diff命令分析两个文件并打印不同的行。

我可以使用相同的diff命令来比较两个字符串吗?

$ more file*
::::::::::::::
file1.txt
::::::::::::::
hey
::::::::::::::
file2.txt
::::::::::::::
hi
Run Code Online (Sandbox Code Playgroud)
$ diff file1.txt file2.txt 
1c1
< hey
---
> hi
Run Code Online (Sandbox Code Playgroud)

而不是保存的内容hey,并hi为两个不同的文件,我可以直接读取呢?

顺便说一下,在下面的示例中没有命名hey或 的文件hi,这就是我收到No such file or directory错误消息的原因。

$ diff hey hi
diff: hey: No such file or directory
diff: hi: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

是的,您可以diff在两个字符串上使用,如果您从它们制作文件,因为diff只会比较文件。

一种快捷方式是在支持这些的 shell 中使用进程替换:

diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )
Run Code Online (Sandbox Code Playgroud)

例子:

diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )
Run Code Online (Sandbox Code Playgroud)

在其他贝壳中,

printf '%s\n' "$string1" >tmpfile
printf '%s\n' "$string2" | diff tmpfile -
rm -f tmpfile
Run Code Online (Sandbox Code Playgroud)

在第二个示例中,一个文件包含第一个字符串,而第二个字符串diff在标准输入中给出。 diff使用包含第一个字符串的文件作为其第一个参数来调用。作为它的第二个参数,-表示它应该读取标准输入(第二个字符串将通过 到达printf)。