ls -b, --escape 的有用示例

Pau*_*rro 7 command-line ls

我是 Ubuntu 的新手,我正在学习这些ls论点。

我已经测试了这些-b, --escape参数,(print C-style escapes for nongraphic characters)但我还没有找到一个有用的例子来说明如何使用它。

我已经创建了一个名称为\*\?\¿\º\ª\?\¿\&\%\$\·SpecialCharacterfile.txtusing的文件touch,但是当我使用lsor 时ls -b它列出了相同的内容。

*?¿ºª?¿&%$·SpecialCharacterfile.txt
Run Code Online (Sandbox Code Playgroud)

我使用 Ubuntu 14.04.5 LTS

mur*_*uru 14

您的所有字符都是图形(它们具有可见的字形)。尝试使用包含空格和不可见字符的文件名:

$ touch $'\n\t\b\a\b'
$ ls -b
\n\t\b\a\b
$ echo *


$ printf "%q\n" *
$'\n'$'\t'$'\b'$'\a'$'\b'
Run Code Online (Sandbox Code Playgroud)

一个实际有用的例子,否则输出会很棘手:不小心将\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
Run Code Online (Sandbox Code Playgroud)

我实际上在 U&L 的一些帖子中看到了这一点。就个人而言,我通常ls -q用于复制粘贴到命令行本身:

$ ls -q
''$'\n\t\b\a\b'  ' '   file-list  'some-file.txt'$'\r'
Run Code Online (Sandbox Code Playgroud)

较新版本的默认行为lsls -q用于交互式使用:为什么 'ls' 突然用单引号括起空格?


小智 6

我发现自己的例子

$ touch "Hello This is my file"
$ ls
Hello This is my file
Run Code Online (Sandbox Code Playgroud)

-b选项

$ ls -b
Hello\ This\ is\ my\ file
Run Code Online (Sandbox Code Playgroud)

当我想在代码中的其他地方使用输出时,第二个不是更好吗?