2

引用符で囲まれた引数 (スペースを含む) を REBOL 3 スクリプトに渡すことはほとんど不可能であることがわかりました。例えば:

rebol -q script.r "foo bar" 40

調べるsystem/script/argsと、文字列が含まれています"foo bar 40"。これはだめだ!情報が失われました。"foo bar"それが最初の引数であり、2 番目の引数であることを知る必要があり40ます。を調べるsystem/options/argsと、次のブロックが得られます: ["foo" "bar" "40"]. 繰り返しますが、役に立たない!情報が失われました。

これに対する解決策は、ある種の引数区切り文字を使用することだと思います。

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

これは で簡単に処理できますがPARSE、それでも気に入りません。system/options/args渡された引数ごとに 1 つの文字列を含めることはそれほど難しくありません。

REBOL は使うのが楽しくて、これは私が本当にがっかりした最初のことです。:(

4

2 に答える 2

4

REBOL 3 で観察された動作は既知のバグです。

(現時点では、R3 は内部的に OS からスクリプトに引数を 1 つの文字列として渡し、プロセス内のすべての元の引数を連結します。現在、このプロセスは完全には元に戻せません。これがこのバグの原因です。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

OSX上のREBOL 2:

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

OSX上のREBOL 3:

2.100.111.2.5
options args:
["foo" "bar" "40"]
script args:
"foo bar 40"
于 2011-07-18T18:11:17.500 に答える
2

引用符をエスケープできます。

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

これがシェルの欠点なのか REBOL の欠点なのかわかりませんか?

于 2011-07-17T04:45:50.777 に答える