2013-06-26 31 views
5

Tôi đang tạo một trình bao đơn giản cho một dự án và tôi muốn các chuỗi đối số được phân tích cú pháp giống như trong Bash.Làm cách nào để chia chuỗi kiểu đối số Bash trong Ruby?

foo bar "hello world" fooz 

Sẽ trở thành:

["foo", "bar", "hello world", "fooz"] 

vv Cho đến nay tôi đã sử dụng CSV::parse_line, thiết lập phân cách cột để " ".compact ing đầu ra. Vấn đề là bây giờ tôi phải chọn xem tôi có muốn hỗ trợ các dấu nháy đơn hay dấu nháy kép hay không. CSV không hỗ trợ nhiều hơn một ký tự dấu tách đơn.

Python có một module cho chính xác này được gọi là shlex:

>>> shlex.split("Test 'hello world' foo") 
['Test', 'hello world', 'foo'] 
>>> shlex.split('Test "hello world" foo') 
['Test', 'hello world', 'foo'] 

Có bất kỳ ẩn được xây dựng trong module của Ruby có thể làm điều này? Bất kỳ đề xuất cho một giải pháp sẽ được đánh giá cao.

+1

Tất nhiên có là: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html#method -c-shellsplit. :) – squiguy

Trả lời

8

Ruby có các module Shellwords:

require "shellwords" 

Shellwords.shellsplit('Test "hello world" foo') 
# => ["Test", "hello world", "foo"] 

'Test "hello world" foo'.shellsplit 
# => ["Test", "hello world", "foo"] 
+0

Tôi tin rằng nó là 'shellsplit', bạn đánh tôi với nó! – squiguy

+0

@squiguy 'Shellwords # split' là bí danh cho' Shellwords # shellsplit'. – toro2k

+2

Sau khi nhập "shellwords" bạn cũng có thể làm ''Test" hello world "foo'.shellsplit' – Hubro

Các vấn đề liên quan