如何让Ruby Gem 'slop'返回Shell Glob后的文件名数组?
解决Slop Gem接收Shell Glob文件列表的问题
问题核心是Shell会先对foo_*进行路径展开,实际传给Ruby程序的参数是-f foo_1 foo_2 foo_3,但你当前的Slop配置只读取了-f后的第一个参数。
修改代码,给array选项添加multiple: true配置,让Slop识别该选项可接收多个后续参数(直到遇到下一个以-开头的选项):
require 'slop' opts = Slop.parse do |o| o.array '-f', '--files', 'List of files', multiple: true end files = opts[:files] puts "Files to process: #{files}"
现在执行myprog.rb -f foo_*,就能得到正确的数组["foo_1", "foo_2", "foo_3"]。
补充说明:
delimiter: ' '用于拆分单个参数内的空格分隔内容(比如-f "foo_1 foo_2"),但Shell展开后是多个独立参数,因此该配置不适用当前场景。multiple: true的作用是告知Slop,该选项可以接收任意数量的后续参数,直到碰到下一个选项标记。
内容的提问来源于stack exchange,提问作者Leonard
相关产品推荐
相关产品推荐

