MSYS2:如何禁用路径名到驱动器号的自动转换?

在MSYS2 shell中测试用mingw编译的C程序时,我遇到了一个问题:我编写了一个命令行解析器,它根据windows约定接受选项(以/开头)。 如果我这样调用我的程序来生成输出文件:

 ./example.exe /o test 

最终在argv[1]中的结果实际上是O:/ 。 从运行CMD.EXE的控制台窗口进行测试时,它可以正常工作。 这个真正最小的程序演示了这种行为

 #include  int main(int argc, char **argv) { if (argc > 1) { puts(argv[1]); } return 0; } 
 $ ./example.exe /o O:/ 

所以我想这是MSYS2 shell试图提供帮助,并将类似于root下面的单字母路径的内容替换为驱动器字母语法。 有没有办法禁用此行为? 总是启动CMD.EXE进行测试有点麻烦。

您可以使用MSYS2_ARG_CONV_EXCL环境变量来禁用此行为。 例如,尝试运行:

 MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test