我正在尝试编写一个带有单引号的 git 别名函数来重命名和提交名称中可能包含空格的文件,但它不起作用:
$ grep '^\s*mvv' ~/.gitconfig
mvv = '!f() { cd ${GIT_PREFIX:-.};git mv -v "$1" "$2";git commit -uno "$1" "$2" -m "Renamed $1 to $2"; }; f'
$ git mvv "9.1.3 Packet Tracer - Identify MAC and IP Addresses - ILM.pdf" 9.1.3_Packet_Tracer_-_Identify_MAC_and_IP_Addresses_-_ILM.pdf
fatal: bad alias.mvv string: unclosed quote
$ git config alias.mvv
'!f() { cd ${GIT_PREFIX:-.}
我也尝试过这个:
$ grep '^\s*mvv' ~/.gitconfig
mvv = !sh -c '{ cd ${GIT_PREFIX:-.};git mv -v "$1" "$2";git commit -uno "$1" "$2" -m "Renamed $1 to $2"; }'
$ git mvv "9.1.3 Packet Tracer - Identify MAC and IP Addresses - ILM.pdf" 9.1.3_Packet_Tracer_-_Identify_MAC_and_IP_Addresses_-_ILM.pdf
sh -c '{ cd ${GIT_PREFIX:-.}: 1: Syntax error: Unterminated quoted string
$ git config alias.mvv
!sh -c '{ cd ${GIT_PREFIX:-.}
$
但是当我运行它时,却说fatal: bad alias.mvv string: unclosed quote
错误。
我希望它能发挥作用。
简短的答案似乎是“不,使用双引号”。为了避免手动转义内部引号,可以要求 Git 进行转义:
然后看看
.git/config
——Git 在别名中转义了双引号:附言。仅适用于 Unix/Linux 或类似 Linux 的环境(请阅读
git-bash
);AFAIK Windows 命令解释器不喜欢命令行中的撇号(单引号)。如果我错了,请有更了解的人纠正我。git help config
语法部分中用于在字符串值配置中引用的规则:里面没有关于单引号的内容。
所以:
是错的。
就是你想要的。您不希望在值中使用单引号,这会阻止 shell 看到您嵌入的 shell 替换语法,但您当然可以在您想要这种效果的地方使用它们。