如何在 Windows 版 Git Bash 中将文字正斜杠传递到 Node.js?

qnt*_*ntm 5 javascript git bash node.js

我正在使用适用于 Windows 的 Git Bash(例如,我右键单击某个目录并从上下文菜单中选择“此处的 Git Bash”)。Node.js v5.10.1。

这是我完整的 Node.js 脚本example.js

console.log(process.argv);
Run Code Online (Sandbox Code Playgroud)

这是我的命令行和输出:

$ node example.js "https://example.com"
[ 'C:\\...\\node.exe',
  'C:\\...\\example.js',
  'https:\\example.com' ]
Run Code Online (Sandbox Code Playgroud)

请注意输入参数“ https://example.com ”如何有两个文字正斜杠,但结果字符串“https:\\example.com”有一个文字反斜杠

我发现命令行中没有多少反斜杠转义(例如“https:\\/example.com”)或额外的正斜杠(例如“ https://////example.com ”)可以阻止这种情况发生。结果总是一个字面反斜杠。

使用相同的 Node.js 可执行文件从普通的 Windowscmd.exe窗口运行相同的脚本不会导致此行为。从 Git Bash for Windows 运行等效的 Python 脚本不会导致此行为。

更新

看这个:

$ node.exe -e "console.log(process.argv)" "https://example.com"
[ 'C:\\...\\node.exe',
  'https://example.com' ]

$ node -e "console.log(process.argv)" "https://example.com"
[ 'C:\\...\\node.exe',
  'https:\\example.com' ]
Run Code Online (Sandbox Code Playgroud)

为什么从调用末尾删除“.exe”会导致斜线反转?如果相关,我正在使用 NVM 1.1.0。which node.exewhich node返回相同的结果,都指向该 EXE 文件。node该目录中没有命名的单独文件。这发生在 Node.js 5.10.1 和 Node.js 6.0.0 上。

Art*_*2e5 1

Git Bash 基于 MSYS2,它像 MinGW 一样进行“ POSIX 路径转换”。当调用看起来像 Windows 的可执行文件时,此转换会使用斜杠将路径 Windows 化。MSYS2 可能以与 MinGW 不同的方式进行了一些“类似于 Windows”的检测。

评论中提到的问题 joezen777 指出了一个解决方案:只需添加;https:;http:MSYS2_ARG_CONV_EXCL. 该文档位于https://github.com/msys2/msys2/wiki/Porting