单引号和双引号:如何在unix和windows中具有相同的行为?

2024-05-14 18:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个批处理脚本,用一些参数调用exe

目前,我正在将参数传递给我的exe,如下所示:

$>my_cmd.exe %*

my_cmd.exe程序的一个选项接受可以包含空格的参数

$>my_cmd.bat --req "in: lava"  (OK my prog receives in: lava)

$>my_cmd.bat --req 'in: lava'  (NOK my program receives 'in: lava')

用户使用单引号或双引号

它与双引号一起工作,因为它们在批处理脚本级别被吃掉,但当它们使用“(单引号)时,它被留下并传递给我的程序

我的命令是多平台的,在unix上,单引号和双引号都是特殊字符

我希望避免在我的_cmd程序中根据平台做一些特定的事情

在shell脚本和批处理脚本中是否有相同的行为。 例如,如果存在单引号,批处理脚本可以吃单引号

告诉我对你来说什么是最好的解决方案

非常感谢


Tags: in程序脚本cmd参数my选项平台
2条回答

在Windows上,参数处理(以及引用、全局搜索等规则)由应用程序负责。如果您的代码除了使用包含完整引号的所有参数的单个字符串之外,还使用了其他任何东西,请理解这是因为您的开发工具已经对GetCommandLine的结果进行了一些预处理。因此,对于不同的报价处理,您需要查看您的开发工具,而不是操作系统。最好的选择通常是自己调用GetCommandLine,并使用您选择的库来处理它,而不是编译器提供的库

也就是说,WindowsShell团队提供了其中一个库。见^{}。但这不是核心操作系统的一部分,使用它是完全可选的

此外,批处理处理器在进行变量替换时考虑引用。这种行为很难改变或禁用,但听起来并不是你问题的根源

为什么不把引号改成双引号呢

set args=%*
my_cmd.exe %args:'="%

相关问题 更多 >

    热门问题