Как вы анализируете строку в массиве, как ARGV? - PullRequest
4 голосов
/ 08 января 2011

Мне нужно повернуть строку, например, такую:

'apple orange "banana pear"'

в такой массив

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

Это похоже на способ преобразования аргументов командной строки в массив ARGV. Какой лучший способ сделать это в Ruby?

Ответы [ 2 ]

10 голосов
/ 08 января 2011

Вы можете использовать модуль Shellwords из стандартной библиотеки ruby, которая существует именно для этой цели:

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

Как видно из приведенного выше примера, это также позволяет вам экранировать пробелы с обратной косой чертой так же, как в оболочке. И, конечно, вы также можете использовать одинарные кавычки вместо двойных кавычек и экранировать оба вида кавычек с обратной косой чертой, чтобы получить буквальные двойные или одинарные кавычки.

1 голос
/ 08 января 2011

Есть даже более чистый способ сделать это, вы можете использовать "% w" следующим образом:

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

Вы можете использовать ключи {} , как, например, в скобках [] или даже в кавычках "" , а также избегать пробелов, поставив обратную косую черту перед пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...