Ruby';s ARGV在windows上可以为空,具体取决于运行脚本的方式

Ruby';s ARGV在windows上可以为空,具体取决于运行脚本的方式,ruby,argv,Ruby,Argv,My demo.rb: puts ARGV.size ARGV.each do |a| puts "Argument: #{a}" end 结果取决于我们如何运行脚本: > demo.rb foo bar 0 > ruby demo.rb foo bar 2 Argument: foo Argument: bar 为什么会发生这种情况?用这个能做点什么吗 编辑: 感谢所有回复!这里是我的设置: >assoc .rb .rb=rbFile >ftype rbF

My demo.rb:

puts ARGV.size

ARGV.each do |a|
  puts "Argument: #{a}"
end
结果取决于我们如何运行脚本:

> demo.rb foo bar
0

> ruby demo.rb foo bar
2
Argument: foo
Argument: bar
为什么会发生这种情况?用这个能做点什么吗

编辑: 感谢所有回复!这里是我的设置:

>assoc .rb
.rb=rbFile

>ftype rbFile
rbFile="c:\ruby-1.8.6\bin\ruby.exe" "%1" %*
看来是对的

但我发现

>demo.rb foo bar
使用以下命令行启动进程:

"C:\ruby-1.8.7\bin\ruby.exe" "c:\demo.rb"
请注意,.rb与1.8.6相关,但1.8.7已启动


所以我猜还有什么事情搞砸了?

检查文件关联。特别是在高级设置中,请查看“打开”操作。确保操作结束时有%*


这个问题是关于powershell的,但本质上是同一个问题,所以我的回答应该更详细一些。

听起来这些参数没有传递给ruby解释器,在您的文件类型关联中。有关关联的外观,请参阅,并验证您的关联。

打开命令窗口:

assoc .rb
它是rbFile吗

ftype rbFile
确保Ruby.exe后面跟着“%1”*

%*有时会丢失

C:\Temp> ftype | grep ruby rbFile="c:\opt\ruby\bin\ruby.exe" "%1" %* rbwFile="c:\opt\ruby\bin\rubyw.exe" "%1" %* C:\Temp>ftype | grep ruby rbFile=“c:\opt\ruby\bin\ruby.exe”“%1”%* rbwFile=“c:\opt\ruby\bin\rubyw.exe”“%1”%*
您可以使用--中的免费工具添加其他帖子中提到的缺少的
%*