我想知道如何创建一个名为标志的文件,例如,如果我想创建一个名为的文件夹-a
,什么命令可以做到这一点?
我尝试了mkdir '-a'
,,mkdir \-a
但都没用。我在 Ubuntu 上。
答案1
像这样调用命令:
mkdir -- -a
意味着--
选项在此之后结束,因此-a
会被逐字解释,而不是 的选项mkdir
。您不仅会在 中找到这种语法,还会在和mkdir
之外的任何 POSIX 兼容实用程序中找到这种语法。echo
test
从规范来看:
参数 -- 应被接受为表示选项结束的分隔符。任何后续参数都应被视为操作数,即使它们以“-”字符开头。-- 参数不应用作选项或操作数。
对于处理文件名的几乎任何操作,建议使用它--
作为安全措施,并确保它们不会破坏命令,例如,在循环中移动文件时,您可能需要调用以下命令,以便调用的文件-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% 可靠。