如何使用以短划线“ – ”开头的文件名作为命令参数?
这可能是一个简单的问题,但如何使用命令行程序以“ – ”开头的文件?
例如,我试图在名为-2013-01-01.pdf
的文件上使用pdfgrep
,但它抱怨没有为-2013-01-01.pdf
定义的选项。
将文件名更改为不以“ – ”开头的内容解决了它,但这不是一个选项,因为文件不是由我创建的。 我只是想检查一下我知道的具体变化。
非常频繁--
在命令行上使用 – 向程序发信号通知将不再使用可用的命令开关。 如果文件包含破折号,这将特别有用,程序将尝试将其解释为选项。
-
如果没有
--
,则会生成错误:$ 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'
-
使用
--
使用我们有一个成功的命令:$ 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.
-
pdfgrep
被编程为理解--
意味着以下命令行参数不是选项。 大多数程序都是这样做的,但并非所有程序都能理解--
。 对于没有的程序,解决方案是使用./
前缀文件名,如下所示:pdfgrep -i posix ./-find.pdf ./-xorg.pdf
这应该适用于任何命令,除非由于某种原因命令不能接受路径,只有纯文件名。
有关命令行的一般介绍,请参阅此有用的PDF 。
您使用./
(或其他相对或绝对路径)前缀文件名。 这样便携。
例:
for zefile in ./*.tmp do rm -f "$zefile" done
使用--
表示选项的结尾并不总是可用。 有些命令会知道,有些则不会。 这将在不同的系统中发生变化。 所以最后,它的便携性降低了。