Kri*_*fer 20 command-line special-characters filename
这可能是一个简单的问题,但是如何在命令行程序中使用以“-”开头的文件?
例如,我试图pdfgrep在一个名为的文件上使用,-2013-01-01.pdf但它抱怨没有为 2、0、1、3 等定义选项。
将文件名更改为不以“-”开头的内容可以解决它,但这不是一个选项,因为这些文件不是由我创建的。我只是想检查一下我知道即将发生的特定变化。
小智 22
--在命令行中非常频繁地用于向程序发出信号,表明将不再使用可用的命令开关。如果文件包含破折号,程序将尝试将其解释为选项,则这特别有用。
没有--,就会产生一个错误:
$ 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'
Run Code Online (Sandbox Code Playgroud)使用--used 我们有一个成功的命令:
$ 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.
Run Code Online (Sandbox Code Playgroud)pdfgrep被编程为理解--以下命令行参数不是选项。大多数程序都这样做,但并非所有程序都理解--. 对于没有的程序,解决方案是在文件名前加上./,如下所示:
pdfgrep -i posix ./-find.pdf ./-xorg.pdf
Run Code Online (Sandbox Code Playgroud)
这应该适用于任何命令,除非由于某种原因该命令不能接受路径,只能接受纯文件名。
有关命令行的一般介绍,请参阅此有用的 PDF。
Oli*_*lac 16
您在文件名前加上./(或另一个有效的相对或绝对路径)。这样它是便携式的。
例子:
for zefile in ./*.tmp
do
rm -f "$zefile"
done
Run Code Online (Sandbox Code Playgroud)
使用--来指示选项的结束并不总是可用。有些命令会知道,有些则不会。这将在不同的系统中发生变化。所以最终,它的便携性较差。