为什么ls要用单引号括住一些文件名

为什么ls要用单引号括住一些文件名

我注意到,当我ls在终端中执行操作时,一些文件名用单引号括起来,而有些则没有。

我不喜欢这种外观,因为我喜欢终端输出美观且统一。是什么导致了此功能,是否可以安全地禁用它?

在此处输入图片描述

答案1

为什么ls要用单引号括住一些文件名

ls用单引号将带有空格的文件名括起来,以便可以安全地复制文件名、在脚本中使用文件名或通过另一个命令传输文件名。

在此处输入图片描述

这是一个非常不受欢迎特征引入到版本 8.25coreutils2016 年,GNU软件包仅由三位开发人员达成共识。

批评者认为,这一变化会让输出结果ls看起来更加难看,不必要地与近半个世纪的 Unix 传统背道而驰,并且由于其实施方式(选择退出而不是选择加入)破坏了与长期存在的脚本和实用程序的兼容性。

因为该功能被引入到coreutils软件包中 - 几乎每个 Linux 发行版都依赖它并且它ls是其中的一部分 - 所以这个变化会影响到可以想象到的每个 Linux 或类 Linux 系统,从 Arch Linux 到 Cygwin。

对于 Debian 和 Debian 衍生发行版(如 Ubuntu),这一变化在遭到大量抗议后被撤销,之后2017 年 10 月再次恢复

作为这个答案说得很清楚,表达您对这一变化的失望的最佳方式是coreutils通过错误报告直接联系开发人员,并(礼貌地)指出他们犯了一个巨大的错误。根据开源精神,大量用户尊重但坚定地坚持要求ls恢复过去的行为方式,理论上应该足以说服coreutils开发人员听取 Linux 社区的意见。


恢复ls'预版本 8.25行为

从短期和务实的角度看,有几种方法可以恢复ls“预版本 8.25保留所有输出的行为。以下是 shell 执行此操作的三种方法bash

使用引用风格环境变量

~/.bashrc在您的 HOME 文件夹 ( ) 中找到您的文件/home/yourusername,然后向其中添加以下行:

export QUOTING_STYLE=literal

保存文件,更改将立即应用于bash您打开的所有新终端。

您还可以运行source ~/.bashrc以将更改推送到进行更改时打开的任何终端窗口。

创建别名ls -N

.bashrc如果您更喜欢使用环境变量的别名,那么您也可以使用 8.25 的新开关创建别名-N。来自ls --help

-N- 文字打印条目名称而不加引号

为此,请将以下行添加到文件中~/.bashrc并保存:

alias ls="ls -N"

运行source ~/.bashrc以将新的更改推送到所有打开的终端。

仅适用于当前运行:使用-N命令行开关

如果您更喜欢coreutils新的默认行为但想要暂时绕过它,您也可以-N直接在命令中使用开关:

ls -N

相关内容