gpt4 book ai didi

rebol - 将带引号的参数传递给 REBOL 3 脚本

转载 作者:行者123 更新时间:2023-12-02 08:53:32 26 4
gpt4 key购买 nike

我发现几乎不可能将带引号的参数(包含空格)传递给 REBOL 3 脚本。例如:

rebol -q script.r "foo bar" 40

如果您检查system/script/args,它包含字符串“foo bar 40”。这是没用的!信息丢失了。我需要知道 "foo bar" 是第一个参数,40 是第二个参数。如果我检查system/options/args,我会得到以下 block :["foo""bar""40"]。再说一遍,没用!信息丢失。

我怀疑解决这个问题的方法是使用某种参数分隔符,例如,

rebol -q script.r 'foo bar' -n 40

这可以通过 PARSE 轻松处理,但我仍然不喜欢它。对于 system/options/args 来说,每个传递的参数包含一个字符串应该不是一件非常困难的事情。

REBOL 使用起来很愉快,这是我发现的第一个令我非常失望的东西。 :(

最佳答案

在 REBOL 3 中,您观察到的行为 is a known bug .

(目前,R3 在内部将 args 作为单个字符串从操作系统传递到脚本,连接该过程中的所有原始参数。目前此过程不完全可逆,这就是此错误的原因。R3 可能应该_通过参数作为字符串列表,有效地保留了原始的 argv ,但删除了解释器本身使用的参数。)


在 REBOL 2 中,system/options/args 对于命令行参数使用更安全,而 system/script/args 可用于在 REBOL 之间传递值脚本更直接。我假设 R3 也会保留类似的行为。

这是一个检查参数解析行为的快速脚本:

REBOL []
print system/version
print "options args:"
probe system/options/args
print "script args:"
probe system/script/args

REBOL 2,OSX 上:

2.7.7.2.5
options args:
["foo bar" "40"]
script args:
"foo bar 40"

REBOL 3,OSX 上:

2.100.111.2.5
options args:
["foo" "bar" "40"]
script args:
"foo bar 40"

关于rebol - 将带引号的参数传递给 REBOL 3 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6721636/

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