我是 Ubuntu 新手,正在学习相关ls
参数。
我已经测试了这些-b, --escape
论点(print C-style escapes for nongraphic characters)
,但没有找到如何使用它的有用例子。
\*\?\¿\º\ª\?\¿\&\%\$\·SpecialCharacterfile.txt
我已经使用创建了一个名为的文件touch
,但是当我使用ls
或时,ls -b
它会列出相同的内容。
*?¿ºª?¿&%$·SpecialCharacterfile.txt
我使用 Ubuntu 14.04.5 LTS
答案1
所有字符都是图形(它们具有可见的字形)。尝试使用包含空格和不可见字符的文件名:
$ touch $'\n\t\b\a\b'
$ ls -b
\n\t\b\a\b
$ echo *
$ printf "%q\n" *
$'\n'$'\t'$'\b'$'\a'$'\b'
一个实际有用的例子,否则输出会很棘手:文件名\r
中意外插入了字符,因为 DOS 文件结尾在操作的中间某处妨碍了操作:
$ od -c file-list
0000000 s o m e - f i l e . t x t \r \n
0000017
$ xargs -a file-list touch
$ ls -b
\n\t\b\a\b file-list some-file.txt\r
我实际上在 U&L 上的一些帖子中看到过这种情况。就我个人而言,我通常会将ls -q
其复制粘贴到命令行本身:
$ ls -q
''$'\n\t\b\a\b' ' ' file-list 'some-file.txt'$'\r'
新版本中的默认行为ls
是ls -q
为了交互使用:为什么“ls”突然用单引号括起带有空格的项目?
答案2
例如我发现自己
$ touch "Hello This is my file"
$ ls
Hello This is my file
带-b
选项
$ ls -b
Hello\ This\ is\ my\ file
当我想在代码的其他地方使用输出时,第二个不是更好吗?
答案3
您创建文件的方式可能是直接粘贴测试。要创建带有反斜杠转义的文件,您需要使用$'...'
引号类型。
因此创建文件应该是:
$ touch one$'\n'two three$'\t'four
他们 ls -b
将向我们展示他们的代表:
$ ls -b
one\ntwo three\tfour
虽然默认ls
不会:
$ ls
one?two three?four
请注意,文件中的反斜杠转义可能会破坏你的脚本,因此永远不应该解析 ls. 而其主要目的正是ls -b
— — 查看文件名,并对其进行潜在故障排除。
答案4
此外muru 的回答这解释了你的文件名中没有一个字符是非图形的,我要指出的是,你的文件名实际上并不包含任何反斜杠(当然,shell 在运行命令时会删除它们)
如果确实如此,-b
将导致它们被打印出并带有转义符:
$ touch 'hi\(zanna' hi\(zanna
$ ls
hi(zanna hi\(zanna
$ ls -b
hi(zanna hi\\(zanna