如何使用以短划线“ – ”开头的文件名作为命令参数?

这可能是一个简单的问题,但如何使用命令行程序以“ – ”开头的文件?

例如,我试图在名为-2013-01-01.pdf的文件上使用pdfgrep ,但它抱怨没有为-2013-01-01.pdf定义的选项。

将文件名更改为不以“ – ”开头的内容解决了它,但这不是一个选项,因为文件不是由我创建的。 我只是想检查一下我知道的具体变化。

非常频繁--在命令行上使用 – 向程序发信号通知将不再使用可用的命令开关。 如果文件包含破折号,这将特别有用,程序将尝试将其解释为选项。

  1. 如果没有-- ,则会生成错误:

     $ pdfgrep -i posix -find.pdf -xorg.pdf pdfgrep: invalid option -- 'f' pdfgrep: invalid option -- 'd' pdfgrep: invalid option -- '.' pdfgrep: invalid option -- 'p' pdfgrep: invalid option -- 'd' pdfgrep: invalid option -- 'f' 
  2. 使用--使用我们有一个成功的命令:

     $ pdfgrep -i posix -- -find.pdf -xorg.pdf -find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk, -find.pdf: posix-basic, posix-egrep and posix-extended. -find.pdf: posix-basic, posix-egrep and posix-extended. -find.pdf: posix-basic, posix-egrep and posix-extended. 
  3. pdfgrep被编程为理解--意味着以下命令行参数不是选项。 大多数程序都是这样做的,但并非所有程序都能理解-- 。 对于没有的程序,解决方案是使用./前缀文件名,如下所示:

      pdfgrep -i posix ./-find.pdf ./-xorg.pdf 

    这应该适用于任何命令,除非由于某种原因命令不能接受路径,只有纯文件名。

有关命令行的一般介绍,请参阅此有用的PDF 。

您使用./ (或其他相对或绝对路径)前缀文件名。 这样便携。

例:

 for zefile in ./*.tmp do rm -f "$zefile" done 

使用--表示选项的结尾并不总是可用。 有些命令会知道,有些则不会。 这将在不同的系统中发生变化。 所以最后,它的便携性降低了。