Windows git bash命令替换输出异常的原因及解决方法咨询
问题产生原因
git branch 命令的默认输出里,当前活跃分支的行首会自带 * 标记。当你直接使用未加引号的 $(git branch) 作为参数传递给其他命令时,Shell 会先对命令替换的输出结果执行通配符扩展(glob expansion):输出中的 * 会被解析为通配符,匹配当前工作目录下的所有文件名,因此最终结果里混入了你目录中的 a、b、c 文件。
Shell 对所有未包裹双引号的变量、命令替换结果,默认都会依次执行分词、通配符扩展两步处理后再传递给目标命令,这是符合 POSIX 标准的行为,并非 Git Bash 的 bug。
修复方案
- 方案1:给命令替换外层包裹双引号,阻止 Shell 执行通配符扩展和不必要的分词,适合需要保留
git branch原有输出格式的场景:
echo "$(git branch)"
- 方案2:使用 Git 官方提供的脚本友好型命令获取分支信息,从根源避免
*这类特殊标记的出现,更适合在自动化脚本中使用:
若仅需要获取当前活跃分支名,使用:
若需要获取所有本地分支的列表,使用格式可控的git branch --show-currentgit for-each-ref命令:# 输出所有本地分支名,无多余符号和空格 git for-each-ref --format='%(refname:short)' refs/heads/
内容的提问来源于stack exchange,提问作者Joaquim d'Souza
相关产品推荐
相关产品推荐

