文件名中使用特殊字符

Sho*_*opi 2 ls special-characters filenames

我需要创建一个名为*'test'*

如果我写touch \'test\'

ls节目'test'

但如果我写touch \*\'test\'\*

ls现在显示*'\''test'\''*

有什么窍门?有人可以解释我做错了什么吗?

我的操作系统是 Ubuntu 20.04

roa*_*ima 6

问题是 GNUls试图通过以明确的引用格式输出奇怪的文件名来提供帮助,类似于在 shell 中输入它们以获得相同名称的方式。

\n

有时它会有所帮助,有时只会增加混乱。要关闭该功能,请设置控制环境变量:

\n
export QUOTING_STYLE=literal\nls\n
Run Code Online (Sandbox Code Playgroud)\n

或者使用相应的命令行标志:

\n
ls --quoting-style=literal\n
Run Code Online (Sandbox Code Playgroud)\n

或更短的ls -N.

\n

您可以通过引用来创建带有奇怪字符的文件名:

\n
touch "*\'test\'*"                       # \xc2\xab *\'test\'* \xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n

请记住,具有不同类型引号的字符串可以相邻(这里我们有一个单引号字符串,后面紧跟一个双引号字符串),因为它是在执行命令行之前处理带引号的字符串的 shell:

\n
touch \'Quotes "here" at\'" 5 o\'clock"    # \xc2\xab Quotes "here" at 5 o\'clock \xc2\xbb\n#     \'\xe2\x86\x90-first-string-\xe2\x86\x92\'"\xe2\x86\x90-second-\xe2\x86\x92"\n
Run Code Online (Sandbox Code Playgroud)\n

你的例子:

\n
touch \\\'test\\\'                         # \xc2\xab \'test\' \xc2\xbb\ntouch \\*\\\'test\\\'\\*                     # \xc2\xab *\'test\'* \xc2\xbb\n\nls -1 --quoting-style=literal          # List files one per line\n  *\'test\'*\n  \'test\'\n
Run Code Online (Sandbox Code Playgroud)\n