我正在编写ruby代码来修复我的大C项目中的一些文件。 我写了这个 -
x = `find $PWD/ | grep "\.h"`
x = x.split("\n")
...
我的代码永远不会分成新的一行,为什么会这样?
答案 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>"
。更轻松,更轻松,更安全。find
将文件名与\0
分开,然后将此字符拆分为\n
(LF)结尾而是使用CR-LF或仅CR的环境呢? =&GT;再次find -print0
以下是生成的程序应该是恕我直言:
x = `find "$PWD" -name "*.h" -print0`
x = x.split("\0")