【发布时间】:2016-12-20 15:55:20
【问题描述】:
将ls -Q 与--quoting-style=shell 一起使用,文件名中的换行符(是的,我知道...)会变成?。这是一个错误吗?有没有办法以与 shell 100% 兼容的格式获取文件名(如果可能,使用 sh 或 bash)?
示例(bash):
$ touch a$'\n'b
$ for s in literal shell shell-always c c-maybe escape locale clocale ; do
ls -Q a?b --quoting-style=$s
done
a?b
'a?b'
'a?b'
"a\nb"
"a\nb"
a\nb
‘a\nb’
‘a\nb’
【问题讨论】:
-
--quoting-style="escape"或--quoting-style="c"应该可以工作... -
@l'L'l:它没有。
eval ls $(ls -Q --quoting-style=escape)产生ls: cannot access anb: No such file or directory,所以它不会往返。如果没有eval,它也不起作用。 -
c可能是你最好的选择......而且任何时候你 eval ls 然后 ls 在一个子shell中它都会得到奇怪的结果。 -
@l'L'l,
--quoting-style=shell的全部意义在于生成eval可以正确解析的内容。这是一个明显的错误。 -
@CharlesDuffy:报告为24225。