点斜杠有什么作用?

点斜杠有什么作用?

据我了解:

  • ./filenamefilename作为脚本执行。
  • ./表示当前目录。

如果 ./ 在 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当您希望输出文件放入调用命令时所在的目录中时,在命令中使用它(如您的示例中所示)是一种从不同目录获取源文件的方法。

相关内容