根据https://www.computerhope.com/unix/udiff.htm
该
diff
命令分析两个文件并打印不同的行。
我可以使用相同的diff
命令来比较两个字符串吗?
$ more file*
::::::::::::::
file1.txt
::::::::::::::
hey
::::::::::::::
file2.txt
::::::::::::::
hi
$ diff file1.txt file2.txt
1c1
< hey
---
> hi
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
答案1
diff
是的,如果您从两个字符串创建文件,则可以使用它们,因为diff
只会比较文件。
执行此操作的快捷方法是在支持这些的 shell 中使用进程替换:
diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )
例子:
$ diff <( printf '%s\n' "hey" ) <( printf '%s\n' "hi" )
1c1
< hey
---
> hi
在其他外壳中,
printf '%s\n' "$string1" >tmpfile
printf '%s\n' "$string2" | diff tmpfile -
rm -f tmpfile
diff
在第二个示例中,一个文件包含第一个字符串,而第二个字符串则在标准输入上 给出。diff
使用包含第一个字符串作为其第一个参数的文件来调用。作为它的第二个参数,-
表明它应该读取标准输入(第二个字符串将通过 到达printf
)。
答案2
对于希望在脚本编辑器 (AppleScript) 中使用字符串而不是文件输入作为“diff”命令的人们,我发现经过一番辛苦工作后,以下方法有效:
do shell script "bash -c 'diff -y <(echo '\\''" & string1 & "'\\'') <(echo '\\''" & string2 & "'\\'')'
请注意,需要将代码呈现为要在 bash shell 和邪恶的转义标记中运行的字符串。