Ruby方法.split(“\ x0”)返回什么?

问题描述 投票:0回答:1

在Ruby gem的默认框架代码中,.gemspec类中的Gem::Specification文件有以下行:

spec.files = `git ls-files -z`.split("\x0")

当我在终端中运行git ls-files -z时,我得到了

.gitignoreGemfileLICENSE.txtREADME.mdRakefiledogeify.gemspeclib/dogeify.rblib/dogeify/version.rb

什么是.split("\x0")方法产生的输出?

PS:参考第一行代码,``字符是否允许终端执行代码并将结果与​​Ruby方法结合起来?

ruby string methods terminal gem
1个回答
11
投票

git(1)帮助说:

$ git help ls-files
[...]
    -z
        \0 line termination on output.

所以当你说git ls-files -z时,它会列出零字节的文件作为文件名之间的分隔符。当你说find ... -print0或使用xargs -0时,你会看到类似格式的输出。您使用零字节作为分隔符的原因是它们不能出现在文件名中,但任何其他分隔符(例如空格)都可以。

然后回到Ruby中,你需要解压缩那个\x0分隔的列表。如果你string.split("\x0"),你将在零字节(string)上分开"\x0"并将这些部分作为数组返回;例如:

> "where\x0is\x0pancakes\x0house?".split("\x0")
 => ["where", "is", "pancakes", "house?"] 

所以git ls-files -z给你一个文件名之间零字节的文件列表,split("\x0")将该字符串分成文件名数组。

© www.soinside.com 2019 - 2024. All rights reserved.