升级到18.04后带有空格的文件名显示为“文件名”


23

从16.04升级到18.04后,所有带空格的文件名都显示为'file name'。以前是简单的file name。没有空格的文件名正常显示:

$ ls
 bar  'foo bar'

尽管它不会以任何方式影响功能,但我发现它看上去很混乱。

bash用作外壳。

如何删除''文件名周围带有空格的显示?


4
为什么要删除它们,它们不属于文件名,因此可以帮助您在命令行或脚本中使用空格管理文件名。
索伦

2
我知道它们不是文件名的一部分。但是它们视觉混乱,我不需要它们。
vidarlo

4
@SorenA如果您ls用来管理脚本中的文件,那么您做错了。为什么你不应该分析的输出ls为什么解析ls(和做什么,而不是)?
甜点

2
@ WinEunuuchs2Unix它使粘贴更加容易,但是正如您的回答所述,当不输出到终端时,它不会改变行为...
vidarlo

2
@vidarlo ls作者至少正在解决一些问题。知道作者正在积极参与Stack Exchange(我的答案中的链接),就可以更轻松地提出未来的改进建议。然后来自其他用户的评论投票将鼓励作者实施建议。
WinEunuuchs2Unix

Answers:


33

这种ls行为改变是从2016年开始的,但最终使其进入了Ubuntu。

要恢复以前的行为,请使用ls -N

(可选)您可以使用环境变量:

QUOTING_STYLE=literal ls

使它成为一个别名,或设置export QUOTING_STYLE=literal~/.bashrc实现旧的行为。

您可以阅读上面的链接以获取更多详细信息,包括何时,何地,为何以及如何成为历史的历史。ls change作者有很多评论,他在其中论证了新行为:

有关更改的几点。

  • 它在coreutils v8.25中引入,并且在v8.26中改进了对齐方式
  • 它仅在输出到终端时发生,因此不会破坏脚本
  • 它为包含空格的文件的用户消除了歧义
  • 它可以清理输出,因此可以安全地复制和粘贴
  • 现在,输出始终有效,可以复制并粘贴回shell
  • 用户可以通过添加别名-N来恢复旧格式ls

12

ls被引用输出,运行:

ls -N

得到没有报价的输出。

man ls

-N,-文字

打印条目名称而不引用


如果需要,可以别名:

echo "alias ls='ls -N'" >> .bashrc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.