2011-01-07 4 views
4

私はこのような文字列をオンにする必要があります。ARGVと似た方法で文字列をどのように解析するのですか?

'apple orange "banana pear"' 

この

["apple", "orange", "banana pear"] 

のような配列には、このコマンドライン引数はARGV配列に変換されている方法のようです。 Rubyでこれを行う最良の方法は何ですか?あなたは、この目的のために正確に存在しているRubyの標準ライブラリからShellwordsモジュールを使用することができます

答えて

10

:上記の例でわかるように

require 'shellwords' 
Shellwords.shellwords 'apple orange "banana pear" pineapple\ apricot' 
#=> ["apple", "orange", "banana pear", "pineapple apricot"] 

、これはまた、バックスラッシュとスペースを同じようにエスケープすることができますあなたはシェルの中にいることができます。もちろん、二重引用符の代わりに一重引用符を使用して、リテラルの二重引用符または一重引用符を得るために、両方の種類の引用符をバックスラッシュでエスケープすることもできます。

+0

これははるかに優雅です、私は私の答えを削除しています。投票が増えたら投票します。 :) – Phrogz

+0

恐ろしい!とてもかっこいい! – RubyDubee

1

これを行うためのクリーンな方法もありますが、あなたは次のように「W%」を使用することができます:あなたは例のように、キー{}を使用することができます

%w{hello there this is just\ a\ test} 
=> ["hello", "there", "this", "is", "just a test"] 

を、カッコ[]""も引用符で囲み、スペースの前にバックスラッシュを入れてスペースをエスケープします。

関連する問題