From: tamouse mailing lists Date: 2013-04-03T05:26:35+09:00 Subject: Re: How to quote variable of an array On Mon, Apr 1, 2013 at 8:26 PM, sundar sundar wrote: > disk_list = [udisk_udisk.EnumerateDevices] This looks interesting. What actually does #EnumerateDevice return? In that construction, you are wrapping that in an array. Is it already an array of strings? I suggest at this point doing `p disk_list` to see what it actually contains. My suspicion is that you've got an array of array of strings there, but I don't know the method, obviously. > disk_list.each { |disk| > #puts %Q{"#{disk}"} > puts disk If this is the source of the lines below.... > udisk_udisk = udisk_service.object("#{disk}") > udisk_udisk.introspect > udisk_udisk_i = udisk_udisk["org.freedesktop.UDisks.Device"] ... what does the following line show? (and where is it in the output?) > puts udisk_udisk_i["IdUuid"] > } > > disk_list is array of available disks attached to system. When i use > "put disk" in the loop i list all the disk with out problem. Like this > /org/freedesktop/UDisks/devices/sr0 > /org/freedesktop/UDisks/devices/sdc > /org/freedesktop/UDisks/devices/sdb > /org/freedesktop/UDisks/devices/sda > /org/freedesktop/UDisks/devices/sda1 > /org/freedesktop/UDisks/devices/sda2 > /org/freedesktop/UDisks/devices/sda3 > /org/freedesktop/UDisks/devices/sdc1 > /org/freedesktop/UDisks/devices/sda5 > /org/freedesktop/UDisks/devices/sda6 > /org/freedesktop/UDisks/devices/sdb1 > /org/freedesktop/UDisks/devices/sda7 > /org/freedesktop/UDisks/devices/sda8 > > But when i quote with either "puts %Q{"#{disk}"}" or "p disk.to_s" then > the output becomes > "/org/freedesktop/UDisks/devices/sr0/org/freedesktop/UDisks/devices/sdc/org/freedesktop/UDisks/devices/sdb/org/freedesktop/UDisks/devices/sda/org/freedesktop/UDisks/devices/sda1/org/freedesktop/UDisks/devices/sda2/org/freedesktop/UDisks/devices/sda3/org/freedesktop/UDisks/devices/sdc1/org/freedesktop/UDisks/devices/sda5/org/freedesktop/UDisks/devices/sda6/org/freedesktop/UDisks/devices/sdb1/org/freedesktop/UDisks/devices/sda7/org/freedesktop/UDisks/devices/sda8" > > What i want is that to list available disk with quote like this > > "/org/freedesktop/UDisks/devices/sr0" > "/org/freedesktop/UDisks/devices/sdc" > "/org/freedesktop/UDisks/devices/sdb" > . > . > . > "/org/freedesktop/UDisks/devices/sda8" > > so that the line "udisk_udisk = udisk_service.object("#{disk}")" takes > disk one by one. > > When i provide disk_list data manually with > > ["/org/freedesktop/UDisks/devices/sr0", > "/org/freedesktop/UDisks/devices/sdc","/org/freedesktop/UDisks/devices/sdb", > ..., "/org/freedesktop/UDisks/devices/sda8"] > > and execute looping then it works. > Here is where I think you've got something different in disk_list than you expect. Checking the output of the #EnumerateDevice method should show this. If instead of the above manual list, try this: [["/org/freedesktop/UDisks/devices/sr0", "/org/freedesktop/UDisks/devices/sdc","/org/freedesktop/UDisks/devices/sdb", ..., "/org/freedesktop/UDisks/devices/sda8"]] (extra array wrapped around it)