博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby 预定义变量和常量
阅读量:4229 次
发布时间:2019-05-26

本文共 8380 字,大约阅读时间需要 27 分钟。

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

预定义变量

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

[95] pry(main)> io = File.open("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+) (.*)/)=> #
[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+) (.*)/)=> #
[102] pry(main)> $~=> #
[10] pry(main)> $LAST_MATCH_INFO=> #

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

[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+) (.*)/)=> #
[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+) (.*)/)=> #
[7] pry(main)> $1=> "12:41"[8] pry(main)> $2=> "INFO"

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

[9] pry(main)> $?=> #
[21] pry(main)> $CHILD_STATUS => #

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

[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)> $>=> #
>[29] pry(main)> $DEFAULT_OUTPUT=> #
>

$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=> #
>

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

[9] pry(main)> $stdout=> #
>

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

[10] pry(main)> $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=> #
>

STDIN 

[17] pry(main)> STDIN=> #
>

STDOUT 

[18] pry(main)> STDOUT=> #
>

self

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

__FILE__ 

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

__LINE__ 

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

__ENCODING__ 

[4] pry(main)> __ENCODING__=> #

 

 

 

转载地址:http://cjjqi.baihongyu.com/

你可能感兴趣的文章
Advanced C# Programming
查看>>
The Java(TM) Tutorial: A Short Course on the Basics (3rd Edition)
查看>>
Solaris(TM) Performance and Tools: DTrace and MDB Techniques for Solaris 10 and OpenSolaris
查看>>
Unicode Explained
查看>>
Essential C# 2.0
查看>>
Eric Sink on the Business of Software
查看>>
LPI Linux Certification in a Nutshell
查看>>
ATL Internals: Working with ATL 8 (2nd Edition)
查看>>
Programming Sudoku
查看>>
Collaborative Geographic Information Systems
查看>>
The Definitive Guide to the .NET Compact Framework
查看>>
Java 2 Platform, Enterprise Edition: Platform and Component Specifications
查看>>
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
查看>>
Access VBA Programming
查看>>
Data Entry and Validation with C# and VB. NET Windows Forms
查看>>
C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks
查看>>
Java 6 Platform Revealed
查看>>
Beginning ASP.NET 2.0 Databases: From Novice to Professional
查看>>
Microsoft Windows 2000 Scripting Guide
查看>>
Visual Basic .NET Bible
查看>>