Я пытаюсь передать массив в ruby-скрипт из командной строки и столкнуться с некоторой проблемой.Передача массива в качестве аргумента команды
Вот проблема:
require 'pp'
def foo(arr1, var, arr2, var2)
puts arr1.class
pp arr1
pp arr1[0]
puts arr2.class
pp arr2
pp arr2[0]
end
foo [1, 2], 3, [5, 6], 8
Вот результат:
Array
[1, 2]
1
Array
[5, 6]
5
Все это хорошо до сих пор. Теперь я могу изменить мой сценарий, чтобы принять аргумент из командной строки:
require 'pp'
def foo(arr1,var)
puts arr1.class
pp arr1
pp arr1[0]
end
foo ARGV[0],3
Вот результат:
jruby test.rb [1, 2], 3, [5, 6], 8
String
"[1,"
91
String
"2],"
50
Как вы можете видеть, массив передается в виде строки и обр [0] в основном печатает значение ascii.
Итак, вопрос в том, как передать массив из командной строки, надеюсь, в одной строке. Также я считаю, что этот вопрос связан со всеми вызовами оболочки, чем просто рубином?
Я использую оболочку bash.
Update: Просто обновил вопрос, чтобы указать, что может быть несколько массивов в различных позициях
Thanx Edu. Массив, который я передаю, представляет собой массив строк, путь к файлу должен быть конкретным. Было бы очень полезно, если бы вы могли дать правильный синтаксис для передачи массива строки, например: jruby test.rb ["path1", "path2"], 3, ["name1", "name2"], 8 – codeObserver
Добавление " и побег их сделал трюк. jruby test.rb [\ "path1 \", \ "path2 \"], 3, [\ "name1 \", \ "name2 \"], 8 .. Thnx, это сработало для меня ! – codeObserver
Привет, CodeObserver, вы можете изменить eval на это: eval ("foo" + ARGV.join ("") .gsub (/ (\ w +) /, '"\ 1"')), так что вы не необходимо избегать передачи аргументов. – Edu