shell 命令行中 .(single period) & ..(double period) 的一些用途是什么

Com*_*erd 6 command-line shell filenames

单个句点.表示当前工作目录

双句号..表示当前工作目录的父目录

我只能想到.在相对路径名等中使用cd ./bin/usr

以上.&如何..在 shell 命令行中使用

小智 6

以上情况如何。& .. 在shell 命令行中使用

在很多方面取决于上下文。简单的插图:

  • 对于使用内置cd命令的路径解析,例如像你说的
  • Literally, 在模式内,例如在路径名扩展的上下文中
  • 在 apattern中用类似的命令替换任何单个字符grep

考虑一下man cdman path_resolution以及关于内置命令如何在内部工作的解释cdman cd这里):

(4). 如果目录操作数的第一个组成部分是点或点-点,则继续执行步骤 6。

(6). 将 curpath 设置为由 PWD 的值、斜杠字符和操作数串联而成的字符串。

(8). 然后将 curpath 值转换为规范形式,如下所示,从头到尾依次考虑每个组件:

一种。应删除点组件和将它们与下一个组件分开的任何斜线。

湾 对于每个点-点组件,如果有一个前一个组件并且它既不是根也不是点-点,则前一个组件、将前一个组件与点-点、点-点分隔的所有斜线以及将点-点与点-点分隔的所有斜线删除以下组件。...

这是一个分步示例,说明上述步骤似乎适用于将目录从 更改/home/user../../boot/memtest86

# echo $PWD
/home/user
(4). cd ../../boot/memtest86
(6). curpath = /home/user/../../boot/memtest86
(8)b 
/home/user/../../boot/memtest86
/home/../boot/memtest86   //step 1
/        boot/memtest86   //step 2
curpath = /boot/memtest86 //result
Run Code Online (Sandbox Code Playgroud)

通过将点组件修剪到与工作目录深度相同的程度,这不可避免地会产生从根表示的路径。单点大小写等的步骤被跳过,因为它像上面一样连接,然后删除./这很容易想象,因为我们在当前目录中。因此,这说明了如何在此命令的上下文中内部实现...引用当前和父目录,这不是通过“替换”而是类似于流编辑...


您可以调查路径名扩展和模式匹配bash

分词后,除非设置了 -f 选项(请参阅 Set Builtin),否则 Bash 会扫描每个单词中的字符 *、? 和 [...] 如果出现这些字符之一,则该单词被视为模式,并替换为与模式匹配的按字母顺序排序的文件名列表。...

在像这样的路径名的模式中,除*,?和之外的任何字符都[...]匹配自身。所以这意味着一个点可以从字面上匹配自己:

ls .*
Run Code Online (Sandbox Code Playgroud)

...将扩展为.., .(因为 * 也包括空值)并相应地列出当前目录和父目录以及当前目录中的任何文件或目录,这些文件或目录字面上以点 (.*) 开头,后跟其他任何内容长度。正如手册中所解释的,您对扩展行为等有一定程度的控制(使用 *glob 选项setshopt)。


这是在模式中使用字符(因为它是grep pattern file1)来选择任何一个字符的示例,当然与文件或目录名称无关:

ls -la | grep .
Run Code Online (Sandbox Code Playgroud)

这将打印目录内容,以便捕获所有内容(grep -v .用于捕获空行)。通常对于此类表达式中的模式,最肯定的情况是grep,单个点匹配任何单个字符。最后考虑点部分中的这些特殊字符示例.以快速提醒一些不同的用例。


因此,点可以用于路径解析,作为模式的一部分的文字字符,它可以替换表达式中的单个字符,grep甚至可以是用于从文件等执行命令的 bash内置函数。它在命令行上使用因上下文而异...


1. 这当然是关于特定命令的语法。如果一个命令接受一个文件/路径作为参数,那么使用点代替它,正如其他人所示,扩展到当前工作目录,这非常方便。


小智 5

除了用于工作目录外,.还可以用作源,例如如果您的.bashrc更改了,那么您可以. .bashrc在终端中使用以使.bashrc生效。它是一样的source .bashrc


mic*_*has 2

您经常想要引用相对于当前目录的某个位置。

如果您想转到上一个目录,您只需说cd ..,如果您想将文件复制到当前目录,您可以说cp /some/file .

每当您需要指定某个位置时,您可以使用以 开头的绝对位置/或相对位置。您不需要经常指定当前值,因为许多命令默认为它。(例如,一个简单的命令ls实际上默认为ls .。)其他命令(例如cp)要求您显式指定路径。在这种情况下.可能正是您想要的。