答案1
为什么ls
要用单引号括住一些文件名
ls
用单引号将带有空格的文件名括起来,以便可以安全地复制文件名、在脚本中使用文件名或通过另一个命令传输文件名。
这是一个非常不受欢迎特征引入到版本 8.25coreutils
2016 年,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