将当前目录符号“.”作为参数传递

将当前目录符号“.”作为参数传递

我读Windows - 目录中的“。”和“..”是什么? - 超级用户

它解释道:

.如果您想将当前目录作为参数传递给命令,也可以使用单个点。

我很困惑。有人能举个例子吗?

答案1

问题是关于 Windows 的,但你标记了所以我的答案适用于Linux。

每次你调用一个命令时,都会有一些工作目录您当前所在的位置;.表示此目录。pwd是了解此目录的通用命令。在 shell 中工作时,bash您可以使用 来“转到”另一个目录cd /another/directory/path

某些命令(如上cd)接受目录(即其路径)作为参数。现在我想谈谈显而易见的基本知识;但您的问题似乎很基础,所以我们开始吧。传递参数的一般语法some_command如下:

some_command argument

或甚至任意数量的参数(本例中为四个):

some_command argument1 argument2 "argument3 with spaces" argument4

您可以将.其用作参数,而不是返回的路径pwd如果如果命令将其解释为目录路径,则应将其理解为当前工作目录。虽然这cd .没什么意义,因为它会使您的 shell“转到”它已经所在的同一目录,但语法完全有效。有用的例子是

df .

它报告当前工作目录所在文件系统的磁盘空间使用情况。

默认情况下,有一些命令对当前工作目录进行操作:ls相当于ls .du相当于du .。请注意,情况并非总是如此:df打印所有可用的文件系统,而df .仅打印其中一个。


我写 ”如果该命令将其解释为目录路径”,因为有些命令不这样做。例如在bash命令中

tr . , <<< foo.bar

将打印foo,bar(在给定字符串中tr替换.为)。这是因为解释为单字符字符串。,foo.bartr.

这表明.shell 不会将 转换为当前目录路径。将其与~转换为 的值$HOME(try echo ~in bash)进行比较。将 解释为.特定路径的深层原因在于 Linux(更广泛的说法是:UNIX)中目录树的设计。

因此,每个命令都可以.自行解释。但是,当它表示目录路径时,惯例是它应该是当前工作目录。Linux 理解这一点,并提供支持这种“转换”的工具。


还要注意,ls -a几乎总是.在“真实”目录内容中打印。当您当前的工作目录被删除时,情况会变得有趣。在这种情况下,ls -a不会打印任何内容,但ls .仍然可以df .工作,就像.在那里一样。

答案2

一个稍微有点设计的 Windows 示例:你可以使用.设置当前目录的属性:

C:\Path\to\Some\Directory> md sub1 sub2

C:\Path\to\Some\Directory> attrib * /s /d
             C:\Path\to\Some\Directory\sub1
             C:\Path\to\Some\Directory\sub2

C:\Path\to\Some\Directory> cd sub2

C:\Path\to\Some\Directory\sub2> attrib +r .

C:\Path\to\Some\Directory\sub2> cd ..

C:\Path\to\Some\Directory> attrib * /s /d
             C:\Path\to\Some\Directory\sub1
     R       C:\Path\to\Some\Directory\sub2

sub2这里我们在目录中  设置了只读属性。比 或 attrib +r . 更短并且更容易输入。attrib +r ..\sub2attrib +r C:\Path\to\Some\Directory \sub2

相关内容