Ruby新手,我正在尝试使用以下代码列出erb文件中的系统用户(在一行上,以逗号分隔):
<% IO.readlines("/etc/passwd").each do |pwd| %><% user = pwd.split(":").first %><% users = user.split.join(",") %><%= users %><% end %>
但它没有加入逗号,只是连续地从数组中粘贴字符串而没有空格。如果我离开(“,”)离开连接,结果相同。
知道出了什么问题,或者更好的方法吗?
答案 0 :(得分:2)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ #Specified value# ┃ #Computed value# ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ inline-table │ table │
├──────────────────────────────────────────────────────────┼──────────────────┤
│ inline, table-row-group, table-column, table-column-group│ block │
│ table-header-group, table-footer-group, table-row │ │
│ table-cell, table-caption, inline-block │ │
├──────────────────────────────────────────────────────────┼──────────────────┤
│ others │ same as specified│
└──────────────────────────────────────────────────────────┴──────────────────┘
这很丑陋,但很有效。
此行<%= IO.readlines('/etc/passwd').reject {|l| l.start_with?('#')}.map {|l| l.split(':')[0]}.join(',') %>
正在尝试拆分users = user.split.join(",")
,这是一个只包含当前迭代用户名的字符串。并且因为您在每次迭代中编写user
(来自该迭代只是users
)的内容,所以它只是在没有空格的情况下附加。 (user
单个字符串表示该字符永远不会被引入。)
对于这样的代码,特别是因为它既不需要Chef的环境也不需要ERB,通过将它放在自己的脚本文件中或使用join
运行然后添加{{1},可以更容易地看到它在做什么。要调试的行。