我想touch
在 Linux 终端中使用该命令来创建一个名称以 符号开头的文件-
,例如-attempt
.
-
我怎样才能克服这个特殊角色的事实呢?
例如,如果我想创建一个名为 的文件#attempt
,我不能只写touch #attempt
相反,我必须写touch \#attempt
,但在这种-
情况下,即使我使用\
它仍然不能很好地工作)。
答案1
两种方式:
将-
远离第一个字符
touch ./-foo
或者使用--
开关结束标记
touch -- -foo
答案2
touch \#attempt
之所以有效,是因为井号对于 shell 来说是特殊的。同样,您需要类似touch \(foo\)
, 或touch 'this & that'
的文件名带有括号或与号等。
但转义破折号并没有帮助,因为它并不特殊到外壳,而是由 shell 启动的实用程序。运行 shell 命令touch \-foo
行与运行相同touch -foo
,无论如何touch
都会得到单个参数-foo
。
所以,与其逃避,还需要做点别的事情。
告诉程序停止将命令参数解释为(可能的)选项的标准方法是--
在选项后面插入参数。例如,这将rm
使用选项-f
在名为的文件上运行-r
:
rm -f -- -r
(并且rm -- --
会删除一个名为 的文件--
。)
或者,您可以通过确保破折号不是文件名的第一个字符(通常是在前面添加./
.同样,这将删除一个名为的文件-rf
:
rm ./-rf