Bash 中双引号意外转义

Bash 中双引号意外转义

我正在尝试将以下 Git 别名添加为 Git bash 中的命令(这里是 Windows 用户)。

yolo = "!git init && git remote add origin $1 && git pull"

这些似乎都不起作用。前者会抛出错误,后者会转义双.gitconfig引号yolo = \"!git init && git remote add origin $1 && git pull\"

$ git config --global alias.yolo "!git init && git remote add origin $1 && git pull"

$ git config --global alias.yolo '"!git init && git remote add origin $1 && git pull"'

更新:第一个命令显示的错误是

git config --global alias.yolo "git config --global alias.yolo '"!git init && git remote add origin $1 && git pull"' init && git remote add origin $1 && git pull"
usage: git remote add [<options>] <name> <url>

-f, --fetch           fetch the remote branches
--tags                import all tags and associated objects when fetching
                      or do not fetch any tag at all (--no-tags)
-t, --track <branch>  branch(es) to track
-m, --master <branch>
                      master branch
--mirror[=<push|fetch>]
                      set up remote as a mirror to push to or fetch from

答案1

你的别名不是正在尝试做git clone已经做的事情吗?


$1在这里不会做任何有用的事情——Git 的别名扩展仅仅将用户给定的参数附加到配置的命令末尾;它并没有告诉 shell 应该将它们映射到 $@。

这里有两个选项:

  • 定义一个函数并运行它:

    yolo = "!fred() { git init && git remote add origin \"$1\" && git pull; }; fred"
    

    这样 $1 就意味着功能参数并正常工作。

  • 编写一个名为的脚本git-yolo

    (不一定是 /bin/sh,可以是 bash 或 perl 或任何东西)

    #!/bin/sh
    git init && git remote add origin "$1" && git pull
    

    将脚本放在你$PATH配置的目录中的任何位置,例如/usr/local/bin/git-yolo。这将使 Git 将其识别为git yolo子命令。

相关内容