Ruby 是一门用于快速写bash编程的语言

功能 1:调用外部命令

你对编写 shell 脚本的语言的期望是 调用外部命令。在 Ruby 中,您可以使用反引号 ():`

`ls`

就是这样!你不需要 ,或类似的东西,或导入 一个图书馆。如果你把它设置为一个变量,你将获得 命令:systempopen

my_date=`date`

注意:如果要使用(例如,如果希望输出为 重定向到 stdout 而不是字符串)或(如果要读取或 从子进程写入数据或向子进程写入数据),这些在 Ruby 中也可用!systempopen

功能 2:状态代码固 

这真的很快:在 Ruby 中,变量包含 上次执行的命令。所以,它真的很接近 Bash:$?

`true`
puts $? # 0

`false`
puts $? # 1

特点 3:它是一种类型化语言 

Ruby 不是一种静态类型语言,但它有类型。事实上,它是一个 面向对象语言,它严格遵循 OOP 范式(超过 Python,在某些方面甚至比 Java 还要多!另一方面,Bash 一切都是一根绳子,这导致了几个安全问题......

total_lines = `wc -l my_file`.to_i # an int containing the number of lines of a file
half = total_lines.div 2           # integer division
puts `head -n #{half} my_file`     # print half of the file

特点4:功能结构 

Ruby 实现 、 (filter)、 等 作为方法的功能操作。因此,例如,您可以将 命令输出:mapselectreduceflat_mapmap

puts `ls`.lines.map { |name| name.strip.length } # prints the lengths of the filenames

给 Git 爱好者的注意事项:我知道我只能使用 ,但这是我想到的第一个例子 演示正则表达式的用法...git branch --show-current

功能 5:正则表达式匹配 

正则表达式是 Ruby 中的一种类型,使用正则表达式的操作内置于 语言。看看这个例子,我们从中得到当前的 git 分支名称调用:git branch

current_branch_regex = /^\* (\S+)/
output_lines = `git branch`.lines
output_lines.each do |line|
  if line =~ current_branch_regex # match the string with the regex
    puts $1                       # prints the match of the first group  
  end
end

特点 6:简单的线程 

如果想要使用多个线程,Ruby 可能是最简单的线程之一 语言来做。看:

thread = Thread.new do
  puts "I'm in a thread!"
end

puts "I'm outside a thread!"

thread.join

因此,例如,它可用于同时下载多个文件:

(1..10).map do |i|                       # iterates from i=1 to i=10, inclusive
  Thread.new do
    `wget http://my_site.com/file_#{i}`  # you can use variables inside commands!  
  end
end.each { |thread| thread.join }        # do/end and curly braces have the same purpose!

功能 7:内置文件和目录操作 

在 Ruby 中,所有文件操作都是类的方法,所有 目录操作是类的方法,它应该是。在 Python 中, 例如,如果要读取您使用 的文件,但如果您想 删除您需要使用的它,并做很多其他事情 与文件无关。FileDiropenos.removeos

因此,在 Ruby 中:

exists = File.exists? 'My File'           # methods that return booleans end in ?
file_content = File.open('My File').read
File.delete 'My File'                     # parentheses are optional if it's not ambiguous

结论 

我希望在阅读这篇简短的文字后,您考虑将 Ruby 用作 替换复杂的 shell 脚本。我的意思是,我不希望你放弃 完全 Bash,但当事情变得复杂时,请考虑使用 Ruby。当然,你 可以在 Python、Perl 甚至 JS 中做到这一点,但是,作为我个人的选择,我认为 Ruby 是最完整、最简单的 Bash 替代品!

 

分类: 编程语言 标签: 调用外部命令 状态代码 类型化语言 功能结构 正则表达式匹配 发布于: 2024-06-23 09:24:13, 点击数: