2011-07-17 18 views
2

引用符付きの引数(スペースを含む)をREBOL 3スクリプトに渡すことはほとんど不可能です。たとえば:あなたはsystem/script/argsを調べるとREBOL 3スクリプトに引用された引数を渡す

rebol -q script.r "foo bar" 40 

、それは文字列"foo bar 40"が含まれています。これは役に立たない!情報が失われました。私は"foo bar"が最初の引数であり、40が2番目であったことを知る必要があります。 system/options/argsを調べると、次のブロックが表示されます。["foo" "bar" "40"]再び、役に立たない!情報が失われました。私はこれを解決するにはいくつかの種類の引数の区切り文字を使用することであると思われる

は、例えば、

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

は、これは簡単にPARSEで扱うことができますが、私はまだそれを好きではありません。 system/options/argsには、渡された引数ごとに1つの文字列を含めることは非常に難しいことではありません。

REBOLは使用するのが楽しいですが、これは私が本当に失望した最初のものです。 :(

+0

は私が右にアムここでREBOL 3について話していると思われますか? (上記の(誤った)振る舞いはREBOL2にはないようです。) – earl

+0

2.7.7 OS Xで同じ動作を観察しました。 – rgchris

+0

@ええ、REBOL 3。REBOL 2で試したことがありません。もう使用しないでください。 (私はREBOLが主に私にとって趣味の言語なので、これで取り除くことができます) –

答えて

4

をREBOL 3では、あなたがis a known bugを観察する行動を

?。

(現時点では、R3は内部的にOSからのargsを単一の文字列としてスクリプトに渡し、プロセス内のすべての元の引数を連結しています)現在のところ、このプロセスは完全には可逆ではありません。のリスト代わりに、ストリング、有効オリジナルargvを保存するが、インタプリタ自体によって使用される引数を剥奪。)system/script/argsの間の値を渡すために使用することができる一方REBOL 2、system/options/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" 
2

あなたは引用符をエスケープすることができます

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

を知ってはいけない、これはシェルやREBOLの欠点がある場合

+1

他のすべてのプログラム(バッチスクリプト、Cプログラムなど)は二重引用符で囲まれた文字列を1つの引数として受け入れるので、REBOLの欠点のようです。 – endo64

+1

フードの下でシェルは引用符を投げ捨てていますが、まだRebol 'argv [0] = foo bar'と' argv [1] = 40'を渡しています。 – HostileFork

関連する問題