拆分(" \ n")不起作用,也不会抛出错误

时间:2016-12-23 08:59:20

标签: ruby bash

我正在编写ruby代码来修复我的大C项目中的一些文件。 我写了这个 -

x = `find $PWD/ | grep "\.h"`
x = x.split("\n")
...

我的代码永远不会分成新的一行,为什么会这样?

enter image description here

2 个答案:

答案 0 :(得分:3)

没有必要启动子shell,Ruby附带Dir.glob

header_files = File.join(Dir.pwd, '**', '*.h')
x = Dir.glob(header_files)

如果相对路径没问题,您可以省略Dir.pwd

答案 1 :(得分:1)

你分裂是没关系的,你没有带来它不是的证据,但是你的shell命令可能不会达到预期的效果,所以让我对它进行评论。

您显然需要一个C头文件列表(以.h结尾的文件)但是:

    如果$PWD =>中有空格,则
  • $PWD未引用会导致您遇到麻烦find会认为参数中有几个目录
  • 您的\.h将被红宝石取消引用,仅作为.h传递给grep,女巫的意思是“任何字符后跟'h'”。使用grep -F .h进行文字搜索。
  • 您的grep会在字符串中的任意位置搜索.h。如果您只想要以.h结尾的文件,则必须使用.h$grep,而不是grep -F
  • 不要find+grep,只需按名称查找:find -name "<pattern>"。更轻松,更轻松,更安全。
  • 您可能希望保护您的代码免受包含换行符的文件名=&gt;让find将文件名与\0分开,然后将此字符拆分为
  • 那些线路不以\n(LF)结尾而是使用CR-LF或仅CR的环境呢? =&GT;再次find -print0

以下是生成的程序应该是恕我直言:

x = `find "$PWD" -name "*.h" -print0`
x = x.split("\0")