Bash Git alias配置需要多少轮转义?

Bash Git alias配置需要多少轮转义?,bash,git,sed,Bash,Git,Sed,我的.gitconfig中有这一行,其中有很多 [alias] alias = "!git config -l | egrep ^alias | sed -e s/alias.\\\\\\([^=\\ ]\\\\+\\\\\\)=/\\\\1\\ =\\ /" 对于RexTemple,()只是rexep中组的开始,如果无法匹配字符(,则需要另一层转义) 别名后的点应该有一些斜线,但是有多少 如果有人能列出一个清单,说明在这个过程中,每一层转义字符在哪里被删除,我可能会对发生的事情有一点

我的.gitconfig中有这一行,其中有很多

[alias]
    alias = "!git config -l | egrep ^alias | sed -e s/alias.\\\\\\([^=\\ ]\\\\+\\\\\\)=/\\\\1\\ =\\ /"
对于RexTemple,
)只是rexep中组的开始,如果无法匹配字符(,则需要另一层转义)

别名后的点应该有一些斜线,但是有多少

如果有人能列出一个清单,说明在这个过程中,每一层转义字符在哪里被删除,我可能会对发生的事情有一点了解

  • 别名后的点之前应该有多少个\个
  • 为什么?
  • 编辑1,示例数据:
    grep alias~/.gitconfig-A 6

    [alias]
        alias = "!git config -l | egrep ^alias | sed -e s/alias.\\\\\\([^=\\ ]\\\\+\\\\\\)=/\\\\1\\ =\\ /"
        blog = log --graph --oneline --decorate --all --simplify-by-decoration
        flog = log --graph --oneline --decorate --all
        test = !composer test
        require = !composer require
        update = !composer update
        install = !composer install
    
    示例输出
    git别名

    alias = !git config -l | egrep ^alias | sed -e s/alias.\\\([^=\ ]\\+\\\)=/\\1\ =\ /
    blog = log --graph --oneline --decorate --all --simplify-by-decoration
    flog = log --graph --oneline --decorate --all
    test = !composer test
    require = !composer require
    update = !composer update
    install = !composer install
    
    示例输出
    git配置-l
    (仅限intresting行)

  • 由于您是在双引号字符串中编写命令,因此需要使用
    \\
    而不是
    \
  • 由于您不是单引号引用sed命令,因此需要包含额外(双)反斜杠
  • 通过引用sed命令并使用
    -E
    减少对反斜杠转义捕获组的需要,可以缓解此问题:

    alias = "!git config -l | sed -nE 's/^alias\\.([^= ]+)=/\\1 = /p'"
    
    注意,我还使用了带有
    p
    标志的
    sed-n
    ,以避免使用grep

  • 由于您是在双引号字符串中编写命令,因此需要使用
    \\
    而不是
    \
  • 由于您不是单引号引用sed命令,因此需要包含额外(双)反斜杠
  • 通过引用sed命令并使用
    -E
    减少对反斜杠转义捕获组的需要,可以缓解此问题:

    alias = "!git config -l | sed -nE 's/^alias\\.([^= ]+)=/\\1 = /p'"
    

    请注意,我还使用了带有
    p
    标志的
    sed-n
    ,以避免使用grep。

    一个以“alias”开头的文本。在“=”之前,它会删除前缀并在“=”周围加空格,现在起作用,但它可能会遇到一些误报,因为点与调用脚本文件时发现的任何字符相匹配(在你的路径中有一个~/bin)这样的地方比试图通过引用和逃离地狱来压缩直接命令要容易理解得多。没有人能解析超过一两层引用,错误是很微妙的。一个以“别名”开头的文本。直到“=”为止,它会删除前缀并在“=”周围放置空格,现在可以工作,但它可能会遇到一些误报,因为点与调用脚本文件(路径中有一个~/bin)发现的任何字符都匹配像这样的地方比试图通过引用和逃离地狱来压缩直接命令要容易理解得多。没有人能解析超过一两层引用,错误也很微妙。因此,您将转义的需要减少到seds\.和\1,因为我使用了“在配置文件中,\需要是\\。添加^inony的别名并使用该别名,可以通过使用单引号而不是双引号进一步减少转义,例如
    alias='!git config-l | sed-nE'\''s/^alias\([^=]+)=/\1=/p'\''
    ?@Ed我尝试过在引号中乱搞,但无法使用单引号-似乎单引号字符串被解释为一个单词,而不是一个标记列表。因此,您减少了对seds\.和\1转义的需要,因为我使用了“在配置文件中,\需要是\\。添加^inony的别名并使用该别名,可以通过使用单引号而不是双引号进一步减少转义,例如
    alias='!git config-l | sed-nE'\''s/^alias\([^=]+)=/\1=/p'\'''
    ?@Ed我尝试过使用引号,但无法使用单引号-似乎单引号字符串被解释为一个单词,而不是标记列表。