You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Windows 10的Git Bash中如何将等号作为参数传递给.cmd或.bat文件

Git Bash中等号作为参数传递的问题解析与解决办法

这问题我之前踩过坑,核心原因是Git Bash(基于MinGW/MSYS环境)的命令行参数解析逻辑和原生Cmd完全不同,等号在这里的特殊地位就是问题根源:

为什么等号这么特殊?

  • 在原生Cmd里,参数分隔符只有空格、制表符这类空白字符,等号=会被当作普通字符,所以直接执行./test.cmd 123=456时,整个字符串会被当成一个完整参数传给批处理,echo %1自然能输出123=456。
  • 但Git Bash(MSYS)的参数解析规则里,=和空格、逗号、分号一样,是默认的参数分隔符!当你输入./test.cmd 123=456时,MSYS会自动把这个参数拆成123和456两部分,批处理里的%1只能拿到第一部分,这就是你只看到123的原因。

你之前尝试的\=或者^=转义之所以没用,是因为MSYS的参数分隔符拆分是在Shell转义处理之前进行的,转义无法改变等号作为分隔符的优先级。

正确的解决方法

方法1:用引号包裹参数并正确传递给Cmd

在Git Bash里,要让带等号的参数被Cmd完整接收,需要用引号把整个参数括起来,同时确保引号能正确传递到Cmd环境:

./test.cmd '"123=456"'

或者用转义引号的方式:

./test.cmd "\"123=456\""

如果你的批处理脚本里不想输出引号,可以把echo %1改成echo %~1(%~1会自动去掉参数的包裹引号),这样就能直接输出123=456了。

方法2:临时修改MSYS的参数解析规则

MSYS提供了环境变量MSYS_ARG_CONV_EXCL,可以用来排除特定字符作为参数分隔符,或者直接禁用所有非空白分隔符。你可以临时设置这个变量后执行命令:

MSYS_ARG_CONV_EXCL="*" ./test.cmd 123=456

这个命令会让Git Bash不再将等号、逗号这类字符当作参数分隔符,直接把123=456作为一个完整参数传给批处理,不需要额外转义。

方法3:永久修改Git Bash的配置(可选)

如果你经常需要处理这类带等号的参数,可以修改Git Bash的配置文件(比如~/.bashrc或~/.profile),添加一行:

export MSYS_ARG_CONV_EXCL="*"

保存后重启Git Bash,以后所有命令都会默认禁用非空白字符作为参数分隔符,不用每次都手动设置环境变量。

内容的提问来源于stack exchange,提问作者Jeff_linux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 07:48:15