在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
相关产品推荐
相关产品推荐

