问题描述
这可能是一个简单的问题,但如何在命令行程序中使用以 “-” 开头的文件?
例如,我试图在名为 -2013-01-01.pdf
的文件上使用 pdfgrep
,但它抱怨说没有为 2、0、1、3 等定义的选项。
将文件名更改为不以 “-” 开头的名称可以解决问题,但这不是一个选项,因为这些文件不是我创建的。我只是想检查我知道即将发生的特定变化。
最佳办法
--
经常用在 命令行 上,以向程序发出信号,表明不再使用可用的命令开关。如果文件包含破折号,程序会尝试将其解释为选项,这将特别有用。
-
没有
--
,会产生一个错误:\n
$ pdfgrep -i posix -find.pdf -xorg.pdf\n\npdfgrep: invalid option -- 'f'\npdfgrep: invalid option -- 'd'\npdfgrep: invalid option -- '.'\npdfgrep: invalid option -- 'p'\npdfgrep: invalid option -- 'd'\npdfgrep: invalid option -- 'f'\n
-
使用
--
我们有一个成功的命令:\n
$ pdfgrep -i posix -- -find.pdf -xorg.pdf\n\n-find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk,\n-find.pdf: posix-basic, posix-egrep and posix-extended.\n-find.pdf: posix-basic, posix-egrep and posix-extended.\n-find.pdf: posix-basic, posix-egrep and posix-extended.\n
-
pdfgrep
被编程为理解--
意味着以下 命令行 参数不是选项。大多数程序都这样做,但并非所有程序都能理解--
。对于不支持的程序,解决方案是在文件名前加上./
,如下所示:\n
pdfgrep -i posix ./-find.pdf ./-xorg.pdf\n
\n
这应该适用于任何命令,除非由于某种原因该命令不能接受路径,只能接受纯文件名。
有关 命令行 的一般介绍,请参阅 this useful PDF 。
次佳办法
您在文件名前加上 ./
(或其他有效的相对或绝对路径)。\n这样它是可移植的。
例子:
for zefile in ./*.tmp
do
rm -f "$zefile"
done
使用 --
来指示选项结束并不总是可用。有些命令会知道,有些则不会。这将在不同的系统中发生变化。所以最后,它的便携性较差。