Передача аргументов в кавычках в скрипт REBOL 3 - PullRequest
2 голосов
/ 17 июля 2011

Я обнаружил, что практически невозможно передать кавычки (содержащие пробелы) в сценарии REBOL 3.Например:

rebol -q script.r "foo bar" 40

Если вы изучите system/script/args, он содержит строку "foo bar 40".Это бесполезно!Информация была потеряна.Мне нужно знать, что "foo bar" был первым аргументом, а 40 - вторым.Если я проверю system/options/args, я получу следующий блок: ["foo" "bar" "40"].Опять бесполезно!Информация была утеряна.

Я подозреваю, что решение этой проблемы заключается в использовании каких-либо разделителей аргументов, например,

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

Это можно легко обработать с помощью PARSE, но я все ещене нравится этоДля system/options/args не должно быть очень сложно содержать по одной строке на переданный аргумент.

REBOL - удовольствие использовать, и это первое, что я обнаружил, и я был действительно разочарован.(

Ответы [ 2 ]

4 голосов
/ 18 июля 2011

В REBOL 3 наблюдаемое вами поведение является известной ошибкой .

(В настоящий момент R3 внутренне передает аргументы из ОС в сценарии в виде единой строки, объединяя все исходные данные.Аргументы в процессе. В настоящее время этот процесс не является полностью обратимым, что является причиной этой ошибки. 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"
2 голосов
/ 17 июля 2011

Вы можете избежать кавычек:

rebol -q script.r \"foo bar\" 40

Не знаете, является ли это недостатком оболочки или REBOL?

...