gpt4 book ai didi

ruby - 传递包含引号的命令行参数

转载 作者:可可西里 更新时间:2023-11-01 10:14:35 25 4
gpt4 key购买 nike

我正在尝试创建一个将运行以下命令的 ruby​​ 脚本:

UV4.exe -j0 -cr test.uvprojx -t"test"

我尝试将 Open3.capture3 用作:

Open3.capture3("UV4.exe", '-j0', '-cr', 'test.uvprojx', '-t"test"')

我遇到的问题是最后一个参数变成了

"-t\"test\""

这会导致 UV4 (Keil uVision IDE) 出错。如果我尝试转义我得到的引号

"-t\\\"test\\\""

这显然也是错误的。

如何让最后一个参数正确?

最佳答案

TL;DR – 在 Ruby 中使用 '-ttest' 而不是 '-t"test"'


如果你输入

$ cmd -t"foo"

在命令行中,引号不会传递给 cmd。相反,cmd 接收单个参数 -tfoo。它相当于:

$ cmd -tfoo

但是如果你输入:

$ cmd -tfoo bar

然后 cmd 收到 两个 参数:-tfoobar 因为中间有空格。

为了避免这种情况,您必须以某种方式转义空间。所有这些(以及更多)都可以工作:

$ cmd -tfoo\ bar
$ cmd -t"foo bar"
$ cmd "-tfoo bar"

对于上述任何一个,cmd 接收一个参数 -tfoo bar

另一方面,在 Ruby 中,capture3 将为您处理此问题,因此不需要引号。您只需将命令行参数作为单独的方法参数传递:

Open3.capture3('cmd', '-tfoo bar')     #  $ cmd -tfoo bar
Open3.capture3('cmd', '-tfoo', 'bar') # $ cmd -tfoo\ bar

如果你添加 " Ruby 假设你想传递那个字符 literally:

Open3.capture3('cmd', '-t"foo bar"')

相当于:

$ cmd -t'"foo bar"'

cmd 接收单个参数 -t"foo bar",包括引号字符。

关于ruby - 传递包含引号的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44949796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com