如何创建一个像命令行参数一样命名的文件?

如何创建一个像命令行参数一样命名的文件?

我想知道如何创建一个名为标志的文件,例如,如果我想创建一个名为的文件夹-a,什么命令可以做到这一点?

我尝试了mkdir '-a',,mkdir \-a但都没用。我在 Ubuntu 上。

答案1

像这样调用命令:

mkdir -- -a

意味着--选项在此之后结束,因此-a会被逐字解释,而不是 的选项mkdir。您不仅会在 中找到这种语法,还会在和mkdir之外的任何 POSIX 兼容实用程序中找到这种语法。echotest从规范来看

参数 -- 应被接受为表示选项结束的分隔符。任何后续参数都应被视为操作数,即使它们以“-”字符开头。-- 参数不应用作选项或操作数。

对于处理文件名的几乎任何操作,建议使用它--作为安全措施,并确保它们不会破坏命令,例如,在循环中移动文件时,您可能需要调用以下命令,以便调用的文件-i不会被(在?)正确地解析为选项:

mv -- "$f" new-"$f"

答案2

与任何合理程序一起工作的最简单的方法是在前面使用相对路径名-,例如将在当前工作目录中mkdir ./-a创建一个名为的目录。-a

使用这个“技巧”的最常见例子是当您想要删除以破折号开头的文件时,您可以执行rm ./-a

答案3

mkdir '-a'或不起作用的原因mkdir \-a是,这两种方法(使用引号或反斜杠)都用于阻止您的(可能bash)不会赋予它们任何特殊含义。由于-a对 shell 来说没有任何特殊含义,因此这些对如何传递给 没有任何影响mkdir

就 而言mkdir,它从 shell 接收参数列表,并且无法判断您是否将它们放在引号中,或者是否有反斜杠。它只看到一个参数-a。这就是为什么您需要--其他答案中解释的那样。

答案4

除了“slhck”的答案之外,还有另一个有时有效的技巧:

将有问题的文件名放在 2 组(不同的)引号内,如"'-a'"'"-a"'

这是否有效取决于程序,但如果程序不支持 POSIX--功能,这是最后的手段。POSIX
方法始终是首选,因为它 100% 可靠。

相关内容