bash命令"rm*〜"有什么作用?

Mik*_*ike 8 syntax bash gnu-make

bash命令是否rm *~只删除以代字号结尾的文件,或者是否存在更高级的bash或gnu make模式?谷歌似乎无法搜索这两个符号组合.我在Makefile clean:target中找到了这个.

gnu会不会只使用隐式规则创建带尾随的文件?

Ple*_*and 8

~(波浪号)在在两种情况下的路径的特殊意义:

~user        # the home directory of user
~/folder     # folder inside your home directory
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,就是这样.您引用的命令完全按照它的样子执行:删除名称以波浪号结尾的文件.诸如emacs之类的文本编辑器在以波浪号结尾的文件名下保存文件的备份副本.

因此,此命令可能用于从当前目录(但不是子目录)中删除这些备份副本.人们希望这样做的一个原因是目录是否会被复制到Web服务器,因为服务器端代码(例如PHP文件)可能包含敏感信息,如密码.


cam*_*amh 5

正如您所猜测的,rm *~只需删除名称以波形符 (~) 结尾的文件。以波形符结尾的文件名通常是编辑器创建的备份文件(特别是,emacs 是最早使用此约定的编辑器之一)。编辑源代码后,通常会留下许多这样的文件。这就是cleanMakefile 中的目标删除这些内容的原因。

是否*~有某种特殊的 bash 模式与大多数 makefile 无关,因为默认情况下使用 /bin/sh 来执行 make 配方。仅当在 makefile 中设置了 SHELL 时才会使用不同的 shell。

查看 make 隐式规则的一个简单方法是make -p在没有 makefile 的目录中运行。您将收到一条错误消息,指出未指定目标,但 make 还将打印出它正在使用的隐式规则。如果您对此输出进行 grep 查找波浪号,您将看到没有隐式规则用它来命名文件。