Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux系统调用时的Ruby模式匹配_Ruby_Regex_Linux - Fatal编程技术网

linux系统调用时的Ruby模式匹配

linux系统调用时的Ruby模式匹配,ruby,regex,linux,Ruby,Regex,Linux,被一点代码卡住了。我研究了一种方法,如果我的系统调用结果与变量中的短语集匹配,则返回true。我尝试了一些方法,比如将系统调用转换为字符串。此外,以下是我到目前为止所做的尝试: def pattern_test test = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"') word = /String I Want To Match/i puts

被一点代码卡住了。我研究了一种方法,如果我的系统调用结果与变量中的短语集匹配,则返回true。我尝试了一些方法,比如将系统调用转换为字符串。此外,以下是我到目前为止所做的尝试:

def pattern_test
  test = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
  word = /String I Want To Match/i
  puts test === word ? "True" : "False"
end
pattern_test

def pattern_test2
  test2 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
  word2 = "String I Want To Match"
  puts test2 =~ word2 ? "True2" : "False2"
end
pattern_test2

def pattern_test3
  test3 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
  word3 = "String I Want To Match"
  puts test3 =~ word3 ? "True3" : "False3"
end
pattern_test3

def pattern_test4
  test4 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"').to_s
  word4 = "String I Want To Match"
  puts test4 === word4 ? "True4" : "False4"
end
pattern_test4
结果是:

String I Want To Match
False
String I Want To Match
False2
String I Want To Match
False3
String I Want To Match
False4
我的预期结果将是返回true,因为测试和单词匹配

更新

我试过一些建议,但也不管用。以下是我尝试过的其他一些方法: def模式测试

test = `rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"`
  word = /String I Want To Match/i
  puts test === word ? "True" : "False"
end
pattern_test

def pattern_test2
  test2 = %x(rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match")
  word2 = 'String I Want To Match'
  puts test2 === word2 ? "True" : "False"
end
pattern_test2

def pattern_test3
  test3 = IO.popen('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
  word3 = "String I Want To Match"
  puts test3 === word3 ? "True" : "False"
end
pattern_test3

def pattern_test4
  test4 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
  word4 = 'String I Want To Match'
  puts test4 === word4 ? "True" : "False"
end
pattern_test4
这是输出:

False
False
False
String I Want To Match
False
更新2

我忘了对每个评论再测试一件事。这是可行的,但我不确定这是最好的方法:

def pattern_test
  test = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
  puts test4 == true ? "True" : "False"
end
pattern_test

system()的返回值不是程序的退出状态吗?那么也许test==0?真:假;我认为,如果您使用bacticks而不是system(),您将得到命令的stdout。“如果命令给出零退出状态,系统将返回true,如果命令执行失败,系统将返回false。”。Backticks、
%x(…)
、或其中一个
popen
Open3
命令更像您想要的。