* 在目录路径末尾

* 在目录路径末尾

*我对bash 脚本中目录路径末尾的字符有疑问。

我有一个脚本,一旦它们足够旧,就会自动从服务器中删除一些档案。该脚本位于机器 A 上,我需要在机器 B 上运行它。我通过ssh(无需 sudo,只需普通用户)远程访问两台机器。该脚本的规则之一是它只需要删除以dirA/dirB/dirC/dirD/dirE*.

但是,该位置没有,dirE所以我猜测它*代表某个变量。这就是我想知道的,*目录路径末尾的含义是什么以及它使脚本做什么?

答案1

这里*是“通配符”,意思是“匹配0个或多个字符”。为了说明这一点,请考虑以下目录:

$ ls
dirA  dire  dirE  dirEa  dirEEE
$ echo dirE*
dirE dirEa dirEEE

正如您在上面看到的,globdirE*匹配dirE, dirEaanddirEEE但不匹配dirAor dire(*nix 系统区分大小写)。

因此,在您的脚本中,这意味着它将从名称dirA/dirB/dirC/dirD/dirE.

答案2

对于那些因其他原因参加本问答的人,我将在此处添加一条注释。

如果您在( 实际上是,但有时是( 或中的内置函数) 或 of或补全的*输出中看到文件名末尾有a ,那就完全不同了。lsls -Flsls -Fls-Ftcshzshtcsh

使用该-F选项,ls在某些内容的末尾添加一个尾随字符特别的文件名以帮助识别特殊性zshtcsh在列出文件名完成时执行相同的操作。

如果你看到:

$ ls -F
dir/  fifo|  file  link@  ls*  socket=

这些/|*=不是文件名的一部分(尽管如果有人试图欺骗您,它们可能是文件名的一部分),但附加了 来ls告诉您:

  • dir是一个目录 ( /)
  • fifo是一个命名管道/fifo ( |)
  • link是一个符号链接 ( @)
  • ls是一个可执行的常规文件 ( *)(其权限中至少有一个执行位)
  • socket是 Unix 域套接字 ( =)

一些ls实现(和zsh完成)还可以通过支持不同选项的终端的颜色来进行区分。

相关内容