这是我为我的小红宝石程序所做的。它可能看起来微不足道,但似乎并不奏效。Ruby尝试使用%x来打印命令行输出
#!/usr/bin/ruby
location = "/home/"
puts %x ("ls " + location)
我得到一个错误,说这句话的语法错误,意想不到的tSTRING_BEG,期待$结束 把%×( “LS” +位置)。
有人可以给我一个解释我做错了什么吗?谢谢
这是我为我的小红宝石程序所做的。它可能看起来微不足道,但似乎并不奏效。Ruby尝试使用%x来打印命令行输出
#!/usr/bin/ruby
location = "/home/"
puts %x ("ls " + location)
我得到一个错误,说这句话的语法错误,意想不到的tSTRING_BEG,期待$结束 把%×( “LS” +位置)。
有人可以给我一个解释我做错了什么吗?谢谢
你需要把紧邻%x
支架或者它不是语法有效:
%x(...) # Valid, enclosed with brackets.
%x (...) # Invalid, %x alone makes no sense.
像%q
等,%x
可以使用[ ]
,{ }
和< >
的支架。
你想:
#!/usr/bin/ruby
location = "/home/"
puts %x(ls #{location})
注%x和位置之间的空间,你不需要引号。
有没有理由不让我在当前工作目录之外使用ls?任何时候我使用%x(“ls somelocation /”),我将离开sh:1:ls:找不到 – user1787282 2013-02-13 22:01:18
ls somelocation /将永远相对于当前目录,它等同于ls ./somelocation/。 – rainkinz 2013-02-13 22:04:46
是的,它是一样的。 – user1787282 2013-02-13 22:07:07
您正在添加%x
和(
之间的空格。以下将工作:
location = "/home/"
puts %x[ls #{location}]
puts %x(ls #{location})
puts `ls #{location}`
puts exec "ls #{location}"
谢谢,就是这样。像一个魅力工作 – user1787282 2013-02-13 21:51:58
我认为有趣的是'x = ['a','b','c']; x [1] =>'a''起作用。也许这是解析器的错误。 – sunnyrjuneja 2013-02-13 21:54:56
是否有理由不让我在当前工作目录之外使用ls?任何时候我用%x(“ls somelocation /”) 我离开sh:1:ls:找不到 – user1787282 2013-02-13 21:59:01