我只是注意到,在我的其中一台机器上(运行Debian Sid),只要键入ls
任何带空格的文件名,都将单引号引起来。
我立即检查了别名,却发现它们完整无缺。
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
另一个测试,文件名称中包含单引号(也回答jimmij的请求):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
使用新的coreutils-8.26输出进行更新(虽然它的混乱程度要小得多,但是默认情况下仍然很烦人)。感谢PádraigBrady的此打印输出:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
为什么会这样呢?如何正确停止?
为了澄清,我本人将ls设置为自动彩色输出。它从来没有把引号括起来。
我正在运行bash
coreutils 8.25。
编辑:似乎coreutils开发人员认为(链接)是一个好主意,尽管打破了最少惊讶的原则以及UNIX已有46年以上的历史,但仍使其成为全球默认值。
有什么办法解决这个问题而无需重新编译?
更新-2017年10月-Debian Sid默认情况下重新启用了外壳转义引用。这太荒谬了。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
在上一个错误报告的回复链的底部,“更改是有意的,并将保留。” https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
我以为这已经解决了。显然不是。
更新:2019年4月:刚刚在PHP中找到了一个奇怪的错误报告,该错误报告是由对的更改引起的ls
。当您使开发人员感到困惑并生成错误的错误报告时,是时候重新考虑您的更改了。
更新:Android toybox ls
现在正在执行类似的操作,但是使用反斜杠代替引号。使用-q选项可使空格呈现为“问号字符”(由于它们显然不是空格,因此我没有检查它们是什么),因此到目前为止,我发现的唯一解决方法是不添加有问题的设备启动脚本时将其提供给脚本并提供源代码。ls
如果在终端中,此功能将使用列,否则将每行打印一次,同时ls
逐字逐字地进入打印空间,因为它是通过管道运行的。
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls | cat
看看它是否消失。如果我有一台时间机器,我会回到1970年的贝尔实验室,并试图说服Ken Thompson,在文件名和目录名中留出空间是一个坏主意。:-P
'*'
。我想我会四处添加ls
别名到我的所有机器上摆脱它...
QUOTING_STYLE=literal
而不是别名来实现。(我想这是一个口味问题,但我更喜欢使用变量。)
ls
命令的另一个原因。