据我了解:
./filename
filename
作为脚本执行。./
表示当前目录。
如果 ./ 在 a 之前,其作用是什么(如果有)全局限定符(筛选):
qpdf --empty --pages ./*.pdf(nOn) -- output.pdf
提出这个问题是因为没有 的执行./
似乎会产生相同的结果。
答案1
前缀./
(或任何路径)可防止以破折号开头的文件名被视为选项。
$ touch ./-l foo bar
$ ls
bar foo -l
$ ls *
-rw-r--r-- 1 ilkkachu ilkkachu 0 Nov 3 15:10 bar
-rw-r--r-- 1 ilkkachu ilkkachu 0 Nov 3 15:10 foo
根本问题在于它是壳它扩展了通配符,当egls
看到参数时-l
,它无法知道它是否来自文件名通配符,或者是否是用户手写的。
上面,调用的文件-l
导致ls
切换到长列表。另一个这样的文件名可能会出现invalid option
错误。或者更糟糕的是,如果命令是rm
,并且您有一个名为-rf
.
这只是 Unix 系统对文件名采取的宽松态度可以说是“错误”的问题之一。如果您想了解更多内容,请参阅 David Wheeler 的这些文章:
答案2
点斜杠构造并不“filename
作为脚本执行” - 它是向 shell(或任何其他正在解释输入的程序)发出的“在当前目录中查找”的指令。当命令位于当前工作目录中并且当前工作目录不在搜索路径中时,它通常会添加到命令(二进制或脚本)之前。qpdf
当您希望输出文件放入调用命令时所在的目录中时,在命令中使用它(如您的示例中所示)是一种从不同目录获取源文件的方法。