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

标签 rebol rebol3

我发现几乎不可能将带引号的参数(包含空格)传递给 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/

相关文章:

http-post - 如何在Rebol3中通过POST读取大量CGI数据?

rebol - 如何从二进制文件(图像)中删除所有 "black pixels"?

rebol - 如何在 MSVC 中构建 Rebol 3

error-handling - 当我使用错误?并尝试,错误需要一个值

http - 快速连续下载时 rebol 超时

character-encoding - 使用 Rebol 3 执行文件编码转换

Rebol 3 - 如何使用 Saphirion 的 Rebol 的 view/new 的等效项进行调试

Rebol3 中的 stdout 和 stderr 端口?

rebol - 如何访问 REBOL header ?