Ruby 预定义变量和常量

其中大部分和 Shell 传递参数很像。既然提到了预定义变量和常量,就顺便把 English 库也说一下,在 Ruby 脚本中使用 English 库,你就可以使用不那么难懂的名称去引用全局变量了(看完下边的例子你就豁然开朗了)。

预定义变量

$_  gets 方法最后读取的字符串

[95] pry(main)> io = File.open("test.txt")
=> #<File:test.txt>
[96] pry(main)> io.gets
=> "hello\n"
[97] pry(main)> io.gets
=> "world\n"
[98] pry(main)> $_
=> "world\n"
[5] pry(main)> $LAST_READ_LINE
=> "world\n"

$&  最后一次模式匹配得到的字符串

[100] pry(main)> "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)
=> #<MatchData "12:41 INFO User has logged in." 1:"12:41" 2:"INFO" 3:"User has logged in.">
[101] pry(main)> $&
=> "12:41 INFO User has logged in."
[8] pry(main)> $MATCH
=> "12:41 INFO User has logged in."

$~  最后一次模式匹配相关的信息

[100] pry(main)> "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)
=> #<MatchData "12:41 INFO User has logged in." 1:"12:41" 2:"INFO" 3:"User has logged in.">
[102] pry(main)> $~
=> #<MatchData "12:41 INFO User has logged in." 1:"12:41" 2:"INFO" 3:"User has logged in.">
[10] pry(main)> $LAST_MATCH_INFO
=> #<MatchData "12:41 INFO User has logged in." 1:"12:41" 2:"INFO" 3:"User has logged in.">

$`  最后一次模式匹配中匹配部分之前的字符串

[1] pry(main)> "hello world" =~ /ll/
=> 2
[2] pry(main)> $`
=> "he"
[14] pry(main)> $PREMATCH
=> "he"

$'  最后一次模式匹配中匹配部分之后的字符串

[1] pry(main)> "hello world" =~ /ll/
=> 2
[3] pry(main)> $'
=> "o world"
[16] pry(main)> $POSTMATCH
=> "o world"

$+  最后一次模式匹配中最后一个()对应的字符串

[5] pry(main)> "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)
=> #<MatchData "12:41 INFO User has logged in." 1:"12:41" 2:"INFO" 3:"User has logged in.">
[6] pry(main)> $+
=> "User has logged in."
[19] pry(main)> $LAST_PAREN_MATCH
=> "User has logged in."

$1、$2   最后一次模式匹配中()匹配的字符串(第 n 个 () 对应 $n)

[5] pry(main)> "12:41 INFO User has logged in.".match(/(\d{2}:\d{2}) (\w+) (.*)/)
=> #<MatchData "12:41 INFO User has logged in." 1:"12:41" 2:"INFO" 3:"User has logged in.">
[7] pry(main)> $1
=> "12:41"
[8] pry(main)> $2
=> "INFO"

$?  最后执行完毕的子进程状态

[9] pry(main)> $?
=> #<Process::Status: pid 5133 exit 0>
[21] pry(main)> $CHILD_STATUS 
=> #<Process::Status: pid 5133 exit 0>

$!  最后发生的异常的相关信息

[29] pry(main)> $!
=> nil
[27] pry(main)> $ERROR_INFO
=> nil

$@   最后发生的异常的相关位置信息

[30] pry(main)> $@
=> nil
[28] pry(main)> $ERROR_POSITION
=> nil

$SAFE  安全级别(默认为 0)

[19] pry(main)> $SAFE
(pry):19: warning: $SAFE will become a normal global variable in Ruby 3.0
=> 0

$/  输入数据的分隔符(默认为 “\n”)

[20] pry(main)> $/
=> "\n"
[22] pry(main)> $INPUT_RECORD_SEPARATOR
=> "\n"
[23] pry(main)> $RS
=> "\n"

$\  输出数据的分隔符(默认为 nil)

[46] pry(main)> "#{$\}"
=> ""
[47] pry(main)> $OUTPUT_RECORD_SEPARATOR
=> nil
[48] pry(main)> $ORS
=> nil

 $,  Array#join 的默认分割字符串(默认为 nil)

[52] pry(main)> "#{$,}"
=> ""
[53] pry(main)> $OUTPUT_FIELD_SEPARATOR
=> nil
[54] pry(main)> $OFS
=> nil

$;  String#split 的默认分割字符串(默认为 nil)

[40] pry(main)> $;
[41] pry(main)> $FIELD_SEPARATOR
=> nil
[42] pry(main)> $FS
=> nil

$.  最后读取的文件行号

[25] pry(main)> $.
=> 2351
[24] pry(main)> $INPUT_LINE_NUMBER
=> 2351

$<  ARGF 的别名

[26] pry(main)> $<
=> ARGF
[26] pry(main)> $DEFAULT_INPUT
=> ARGF

$>  print、puts、p 等的默认输出位置(默认为 STDOUT)

[34] pry(main)> $>
=> #<IO:<STDOUT>>
[29] pry(main)> $DEFAULT_OUTPUT
=> #<IO:<STDOUT>>

$0  $PROGRAM_NAME 的别名

[32] pry(main)> $0
=> "pry"
[30] pry(main)> $PROGRAM_NAME
=> "pry"

$*  ARGV 的别名

[35] pry(main)> $*
=> []
[33] pry(main)> $ARGV
=> []

$$  当前执行中的 Ruby 的进程 ID

[36] pry(main)> $$
=> 5126
[34] pry(main)> $PROCESS_ID
=> 5126

$:  $LOAD_PATH 的别名

[37] pry(main)> $:
=> ["/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/coderay-1.1.3/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/method_source-1.0.0/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/pry-0.13.1/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby/2.7.0/x86_64-linux",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby/2.7.0/x86_64-linux",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux"]
[62] pry(main)> $LOAD_PATH
=> ["/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/coderay-1.1.3/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/method_source-1.0.0/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/pry-0.13.1/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby/2.7.0/x86_64-linux",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby/2.7.0/x86_64-linux",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux"]

$"  $LOADED_FEATURES 的别名

[38] pry(main)> $"
=> ["enumerator.so",
 "thread.rb",
 "rational.so",
 "complex.so",
 "ruby2_keywords.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/enc/encdb.so",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/enc/trans/transdb.so",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/rbconfig.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/compatibility.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/defaults.rb",

[63] pry(main)> $LOADED_FEATURES
=> ["enumerator.so",
 "thread.rb",
 "rational.so",
 "complex.so",
 "ruby2_keywords.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/enc/encdb.so",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/enc/trans/transdb.so",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/rbconfig.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/compatibility.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/defaults.rb",

$DEBUG  指定 DEBUG 模式的标识

[4] pry(main)> $DEBUG
=> false

$FILENAME  ARGF 当前在读的文件名

[6] pry(main)> $FILENAME
=> "-"

$LOAD_PATH  执行 require 读取文件时搜索的目录名数组

[7] pry(main)> $LOAD_PATH
=> ["/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/coderay-1.1.3/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/method_source-1.0.0/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/pry-0.13.1/lib",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby/2.7.0/x86_64-linux",
 "/usr/local/ruby-2.7.1/lib/ruby/site_ruby",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby/2.7.0/x86_64-linux",
 "/usr/local/ruby-2.7.1/lib/ruby/vendor_ruby",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux"]

 $stdin  标准输入(默认为 STDIN)

[8] pry(main)> $stdin
=> #<IO:<STDIN>>

$stdout   标准输出(默认为 STDOUT)

[9] pry(main)> $stdout
=> #<IO:<STDOUT>>

$stderr  标准错误输出(默认为 STDERR)

[10] pry(main)> $stderr
=> #<IO:<STDERR>>

$VERBOSE  指定冗长模式的标识(默认为 nil)

[11] pry(main)> $VERBOSE
=> false

$PROGRAM_NAME  当前执行中的 Ruby 脚本别名

[12] pry(main)> $PROGRAM_NAME
=> "pry"

$LOADED_FEATURES  require 读取的类库名一览表

[13] pry(main)> $LOADED_FEATURES
=> ["enumerator.so",
 "thread.rb",
 "rational.so",
 "complex.so",
 "ruby2_keywords.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/enc/encdb.so",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/enc/trans/transdb.so",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/x86_64-linux/rbconfig.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/compatibility.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/defaults.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/deprecate.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/errors.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/version.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/requirement.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/platform.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/basic_specification.rb",
 "/usr/local/ruby-2.7.1/lib/ruby/2.7.0/rubygems/stub_specification.rb",

预定义常量

ARGF

[1] pry(main)> ARGF
=> ARGF

ARGV

[2] pry(main)> ARGV
=> []

ENV

[5] pry(main)> ENV
=> {"CLASSPATH"=>":/usr/lib/jvm/java/lib:/usr/lib/jvm/java/jre/lib",
 "COLUMNS"=>"119",
 "HISTCONTROL"=>"ignoredups",
 "HISTSIZE"=>"1000",
 "HOME"=>"/root",
 "HOSTNAME"=>"master",
 "JAVA_HOME"=>"/usr/lib/jvm/java",
 "JENKINS_HOME"=>"/var/lib/jenkins/",
 "JRE_HOME"=>"/usr/lib/jvm/java/jre",
 "LANG"=>"en_US.UTF-8",
 "LESSOPEN"=>"||/usr/bin/lesspipe.sh %s",
 "LINES"=>"18",
 "LOGNAME"=>"root",
  ...

RUBY_COPYRIGHT 

[8] pry(main)> RUBY_COPYRIGHT
=> "ruby - Copyright (C) 1993-2020 Yukihiro Matsumoto"

RUBY_DESCRIPTION 

[9] pry(main)> RUBY_DESCRIPTION
=> "ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]"

 RUBY_ENGINE

[10] pry(main)> RUBY_ENGINE
=> "ruby"

RUBY_PATCHLEVEL 

[12] pry(main)> RUBY_PATCHLEVEL
=> 83

RUBY_PLATFORM 

[13] pry(main)> RUBY_PLATFORM
=> "x86_64-linux"

RUBY_RELEASE_DATE 

[14] pry(main)> RUBY_RELEASE_DATE
=> "2020-03-31"

RUBY_VERSION 

[15] pry(main)> RUBY_VERSION
=> "2.7.1"

STDERR 

[16] pry(main)> STDERR
=> #<IO:<STDERR>>

STDIN 

[17] pry(main)> STDIN
=> #<IO:<STDIN>>

STDOUT 

[18] pry(main)> STDOUT
=> #<IO:<STDOUT>>

self

[1] pry(main)> self
=> main

__FILE__ 

[2] pry(main)> __FILE__
=> "(pry)"

__LINE__ 

[3] pry(main)> __LINE__
=> 3

__ENCODING__ 

[4] pry(main)> __ENCODING__
=> #<Encoding:UTF-8>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值