2

我有一个 sh 脚本,myscript.sh它将一个目录作为输入参数,并对该目录中的文件进行一些递归处理。我想在 Windows 命令行中运行这个脚本(我使用MinGW /MSYS 发行版)。

如何正确提供带有空格的路径作为输入参数?

例如,我想给出一个路径,'dirA\dir B'。我尝试了许多不同的组合,包括

sh -c 'myscript.sh "dirA/dir B"'

sh -c 'myscript.sh "dirA/dir\ B"'

sh -c "myscript.sh 'dirA/dir\\ B'"

sh -c "myscript.sh \"dirA/dir B\" "

sh -c "myscript.sh dirA/dir\ B "

但在所有这些上,脚本都将路径理解为“dirA/dir”。

4

1 回答 1

0

cmd 不理解单引号。如果 sh 确实如此,则将外引号加倍,以便在 cmd 提示符下对参数进行双引号,并将单引号传递给 sh 进行解释。

您列出的第三个选项是正确的想法,但我不清楚您在用\\做什么。sh 是否要求您转义双引号字符串中的空格?如果我没记错的话,这是非此即彼的,不是两者兼而有之。其中一个应该可以工作(取决于您的 sh Windows 端口是使用 Unix 样式的正斜杠路径分隔符还是 Windows 样式的反斜杠分隔符,或者两者都使用):

sh -c "myscript.sh 'dirA/dir B'"

或者

sh -c "myscript.sh 'dirA\dir B'"

我不确定为什么第四个选项不起作用。该方法适用于将双引号参数从 cmd 传递给 PowerShell。例如,这有效:

powershell -noexit "sl \"C:\Program Files\""

这让我怀疑路径参数有问题,'dirA/dir B'尤其"dirA/dir B"是如果上面的建议不起作用的话。

说到 PowerShell,您可能想尝试一下。以下任何一项都应该有效:

sh -c 'myscript.sh "dirA/dir B"'

sh -c "myscript.sh 'dirA/dir B'"

sh -c 'myscript.sh ''dirA/dir B'''

sh -c "myscript.sh `"dirA/dir B`""
于 2013-08-31T01:14:17.203 回答