linux键盘输入数组传到argv,如何在ARGV命令行参数中传递数组?

我复制你的源并粘贴成两个文件:

test.rb:

def test (app, download, launch)

for i in 0..(app.length - 1)do

#DO SOMETHING HERE WITH THIS

p app[i].to_s + download[i].to_s + launch[i].to_s

end

end

test (ARGV[0].split(//) , ARGV[2].split(//) ,ARGV[1].split(//))

和TEST2。 rb:

app = ["fda","asdf"]

down = ["ok","nok"]

la = ["ok","ok"]

system("ruby test.rb #{app} #{down} #{la}")

使用Ruby 1.9.2p290,我得到了这个结果wh我运行你的代码:

ruby test2.rb

test.rb:7: syntax error, unexpected ',', expecting ')'

test (ARGV[0].split(//) , ARGV[2].split(//) ,ARGV[1].split(//))

^

test.rb:7: syntax error, unexpected ',', expecting $end

test (ARGV[0].split(//) , ARGV[2].split(//) ,ARGV[1].split(//))

这告诉我你没有准确地报告你看到的问题。

固定的语法错误返回此:

ruby test2.rb

"[[a"

"fos"

"dkd"

"a,f"

",]"

我得到的输出是什么,我会期望从你的代码,但它并不像你说你得到了什么,所以我怀疑你的报道输出正确。当你寻求帮助时,请准确无误,无论是你写的代码和你见过的输出。

看你的代码正在通过数据显示,参数是:

0 [fda,

1 asdf]

2 [ok,

3 nok]

4 [ok,

5 ok]

仅供参考,我用这段代码代替test.rb那些:

ARGV.each_with_index do |a, i|

puts "#{i} #{a}"

end

我期望那是因为system("ruby test.rb #{app} #{down} #{la}")不会做你认为它做的事情。以下是发送到子shell的实际命令查找时system过程它像:

test.rb [fda, asdf] [ok, nok] [ok, ok]

再次,相匹配的论点是什么,当应用程序看到他们喜欢。

要明白发生了什么,你需要阅读的文档system:

system([env,] command... [,options]) -> true, false or nil

[...]

command... is one of following forms.

[...]

cmdname, arg1, ... : command name and one or more arguments (no shell)

所以,system允许我们单独发送的所有参数,这真的是你想要的。更改test2.rb到:

app = %w[ fda asdf ]

down = %w[ ok nok ]

la = %w[ ok ok ]

system(

"echo",

"test.rb",

%Q["#{ app.join(',') }"],

%Q["#{ down.join(',') }"],

%Q["#{ la.join(',') }"]

)

给我这个在命令行:

ruby test2.rb

test.rb "fda,asdf" "ok,nok" "ok,ok"

这似乎更实用一点。因为如何system的作品,我可以清理并降低了一下:

app = %w[ fda asdf ]

down = %w[ ok nok ]

la = %w[ ok ok ]

system(

"ruby", # execute this

"test.rb", # with this script name

app.join(','), down.join(','), la.join(',') # and these parameters

)

在看什么test.rb看到显示:

ruby test2.rb

0 fda,asdf

1 ok,nok

2 ok,ok

再次,改进,更接近预期的代码。

我不打算完成你的代码,因为我怀疑这是一项家庭作业,而不是实际使用。一些提示可以帮助您:

您对split的使用不正确,也不是我要放的地方。

您使用for不是惯用的Ruby。看看Array.eachAND了解为什么它是首选而不是for。

您不需要使用to_s,因为您已经在处理字符串和字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值