git - 在 Git 中以 glob 模式转义字符

标签 git shell

以下 git 命令(删除所有以 ~ 结尾的文件)使用转义字符

git rm \*~

基本原理是除了 shell 使用的扩展之外,git 使用它自己的文件名扩展。

这是否意味着转义字符是一种抑制 shell 进行的文件名扩展的方法?

不知何故,我无法正确处理这个问题。

  • 为什么 git 使用它自己的文件名扩展?是因为 shell 文件名扩展在不同的 shell/OS 中可以以不同的方式工作
  • 如果是这样,为什么不在 git 命令的 shell 级别抑制文件名扩展,并允许 git 使用 glob 模式执行它自己的语义

最佳答案

是的,转义字符抑制了通常由 Unix shell 执行的文件名扩展。回答子问题:

  1. git rm 实现了自己的扩展,可能是因为文件可能不存在于 check out 目录中。 (想想你首先 rm *~ 的情况,然后记住你也想从 git 中删除它们。)

  2. 使用反斜杠转义字符(或将参数用引号引起来)正是这样做的——在 shell 级别抑制文件名扩展。这不能由 git 自动完成,因为 git 不控制你的 shell,当它被执行时,扩展已经结束。扩展必须由 shell 本身阻止,或者更现实地说,由最终用户通过 shell 调用 git 阻止。

关于git - 在 Git 中以 glob 模式转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992459/

相关文章:

linux-bash 从 csv 中读取数据并有条件地求和值

linux - bash - 删除目录列表(包括它们的内容)

Git 存储库中缺少文件和文件夹

git - 有多个时如何只删除一个远程源?

git - "check out code"在行尾的 git 文档中意味着什么?

linux - 菜单的 Shell 脚本

linux - wget:非 http URL 上不支持的方案

oracle - plsql 脚本中的数组处理

mysql - 在 MySQL 数据库上使用版本控制 (Git)

git - git中怎么两个分支变成 "linked"?