Linux diff命令接受一个选项,该选项指示它"忽略所有行都为空的更改",如手册页所示.

在try 此选项时,我遇到了这样一种情况:即使使用了-B(或--忽略-空行)选项,空行似乎也不会被忽略.

以下是演示该问题的工作脚本:

#!/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.

推荐答案

正如手册页告诉您的那样,-B适用于only个更改以空格表示的地方.在您的file_b*示例中,某些内容更改为空行,因此"行都是空的"是不正确的.

你可能会争辩说,这个描述是模棱两可的,但我认为这就是它的意思.

Linux相关问答推荐

无法在Raspberry PI 3 Model B上分配256TB的虚拟内存

如何创建一堆文件中所有单词的列表?

Linux 的 __fastfail 替代方案?

条件句if的正确写法是怎样的?

访问证书里面的图片

docker rm 命令在具有相同操作系统的不同机器上返回不同的状态码

Linux 如何将主机文件作为用户的输入并将其调用到脚本中

使用 AWS CLI 进行 Bash - 无法找到凭证

如何在 shell 脚本中只读取一个字符

永久反转补丁文件

如何将文件从 Vagrant 机器复制到 localhost

什么是最有效的不区分大小写的 grep 用法?

我如何从 Ubuntu 上的源代码自己构建 python?

'&&' 与 '&' 与 Bash 中的 'test' 命令

如何设置errno值?

将所有文件扩展名转换为小写

当父进程被杀死时,使用 fork() 创建的子进程是否会自动被杀死?

Hierarchical分层 ldd(1)

Bash 将 awk 的输出捕获到数组中

带有日期和时间的 Linux 命令历史记录