如何使用以破折号“-”开头的文件名作为命令参数?

如何使用以破折号“-”开头的文件名作为命令参数?

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

例如,我尝试pdfgrep在名为的文件上使用-2013-01-01.pdf,但它抱怨说没有为 2、0、1、3 等定义选项。

将文件名改为不以“-”开头的文件名即可解决问题,但这不是一个选项,因为这些文件不是我创建的。我只是想检查我知道即将发生的特定更改。

答案1

非常常用--于命令行,向程序发出信号,表示不再使用可用的命令开关。如果文件包含破折号(程序会尝试将其解释为选项),则此功能特别有用。

  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

答案2

您可以在文件名前面加上./(或其他可用的相对或绝对路径)。这样它就具有可移植性。

例子:

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

用来--表示选项结束并不总是可用的。有些命令知道这一点,有些则不知道。而且这会在不同的系统上发生变化。所以最终它的可移植性较差。

相关内容