我如何创建以“开头的文件名”

我如何创建以“开头的文件名”

我想创建一个具有此名称的文件:

"\?$*'Helloword'*$?\"

我尝试使用此命令,但结果不正确

touch \"\\\?\$\*\'\Helloword\'\*\$\?\\\"

答案1

你没有提到哪个 shell,但我假设bash。那么,恭喜你!你使用的引用/转义字符串实际上是正确的

那么你为什么认为它是错的?你没有展示你的输出或你如何检索它,但我还假设你使用了ls(这很自然)。

ls正在返回'"\?$*'\''Helloword'\''*$?\"'。但这实际上只是您所要求的另一种引用/转义形式"\?$*'Helloword'*$?\"

想要/需要证据吗?

首先,再做一次,但这次使用向您显示的touch形式:ls

touch '"\?$*'\''Helloword'\''*$?\"'

现在再做一次ls。仍然只有一个文件,对吗?

'"\?$*'\''Helloword'\''*$?\"'=="\?$*'Helloword'*$?\"

此外,exa用 Rust 编写的 现代替代品ls确实返回了您开始的形式:

> exa -l \"*
.rw-r--r-- 0 username 30 Apr  1:35 "\?$*'Helloword'*$?\"

但您无需安装即可看到它。可以使用exa以下更基本的替代方案:ls

> echo \"*
"\?$*'Helloword'*$?\"

边注:

我有时发现逐步构建复杂的引用/转义情况更容易。例如:

> filename=Helloword
> filename="'$filename'"
> filename=\*$filename\*
> filename=\$$filename\$
> filename=\?$filename\?
> filename=\\$filename\\
> filename=\"$filename\"
> echo $filename
"\?$*'Helloword'*$?\"
> touch $filename

当然,您可以echo在任何阶段使用变量来确保您走在正确的轨道上。

相关内容