Linux diff命令接受一个选项,该选项指示它“忽略所有行为空白的更改”,如手册页所述。
在尝试这个选项时,我遇到了一个情况,即空行似乎不会被忽略,即使使用了-B(或-ignore-blank-lines)选项。
下面是一个演示该问题的工作脚本:
#!/bin/bash
echo -e 'a\nb\nc' > file_a1
echo -e 'a\n\nb' > file_a2
echo
echo \ file_a1
cat file_a1
# a
# b
# c
echo
echo \ file_a2
cat file_a2
# a
#
# b
echo
echo \ regular diff
diff file_a1 file_a2
# 1a2
# > <- output related to empty line
# 3d3
# < c
echo
echo \ diff -B : empty lines ignored, as expected
diff -B file_a1 file_a2
# 3d3
# < c
echo -e 'a\nb' > file_b1
echo -e '\nb' > file_b2
echo
echo \ file_b1
cat file_b1
# a
# b
echo
echo \ file_b2
cat file_b2
#
# b
echo
echo \ regular diff
diff file_b1 file_b2
# 1c1
# < a
# ---
# > <- output related to empty line
echo
echo \ diff -B : same output, as if -B option was not present
diff -B file_b1 file_b2
# 1c1
# < a
# ---
# > <- output related to empty line
echo
echo \ diff version
diff --version
# diff (GNU diffutils) 3.9
# Copyright (C) 2023 Free Software Foundation, Inc.
# License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
# This is free software: you are free to change and redistribute it.
# There is NO WARRANTY, to the extent permitted by law.
#
# Written by Paul Eggert, Mike Haertel, David Hayes,
# Richard Stallman, and Len Tower.
1条答案
按热度按时间tmb3ates1#
就像手册页告诉您的那样,
-B
适用于 only 更改在空白中的情况。在file_b*
示例中,有些东西变成了空行,所以“行都是空白”是不真实的。你可能会说这个描述是模棱两可的,但我相信这就是它的意思。