在 Ruby 中,运行 Ruby 脚本或使用 Ruby 解释器时,可以通过 命令行选项 来控制其行为。这些选项可以帮助你调试代码、指定编码、运行单行命令等。以下是关于 Ruby 命令行选项的详细说明,涵盖常用选项和实际用法。


Ruby 命令行基本格式

运行 Ruby 的基本命令是:

ruby [选项] [脚本文件] [参数]
  • [选项]:控制 Ruby 解释器的行为。
  • [脚本文件]:要执行的 .rb 文件(可选)。
  • [参数]:传递给脚本的参数。

运行 ruby --help 可以查看所有可用选项。


常用命令行选项

1. -v--version

显示 Ruby 的版本号并退出。

ruby -v

输出示例:

ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]

2. -e '命令'

直接在命令行中执行单行 Ruby 代码。

ruby -e 'puts "你好,世界!"'

输出:

你好,世界!

多个 -e 可以组合:

ruby -e 'x = 5' -e 'puts x * 2'

输出:10

3. -r 库名

加载指定的 Ruby 库(相当于脚本中的 require)。

ruby -r 'date' -e 'puts Date.today'

输出当前日期,例如:2025-03-22

4. -c

检查脚本语法是否正确,不执行代码。

ruby -c script.rb

如果语法正确,输出:Syntax OK。否则显示错误。

5. -w

启用警告模式,显示潜在问题(如未使用的变量)。

ruby -w script.rb

6. -d--debug

启用调试模式,显示详细的调试信息,并设置 $DEBUG = true

ruby -d script.rb

7. -I 路径

指定加载路径(相当于添加 RUBYLIB),用于查找 Ruby 文件。

ruby -I ./lib script.rb

加载 ./lib 目录中的库。

8. -E编码--encoding=编码

指定外部/内部编码,常用于处理中文等非 ASCII 字符。

ruby -E UTF-8 script.rb

或指定外部和内部编码:

ruby -E UTF-8:UTF-8 script.rb
  • 第一个 UTF-8 是外部编码(输入输出)。
  • 第二个 UTF-8 是内部编码(程序处理)。

示例(处理中文):

ruby -E UTF-8 -e 'puts "你好,世界!"'

9. -n-p

用于逐行处理输入,类似 awksed

  • -n:循环读取输入,代码在每次循环中执行。
  • -p:类似 -n,但自动打印每行。

示例(将输入转为大写):

echo "你好\n世界" | ruby -n -e 'puts $_.upcase'

输出:

你好
世界

-p 的例子:

echo "ruby\ncode" | ruby -p -e '$_.upcase!'

输出:

RUBY
CODE
  • $_ 表示当前行。

10. -l

启用行处理模式,自动处理换行符(常与 -n-p 配合)。

echo "line1\nline2" | ruby -l -n -e 'puts ">> #{$_}"'

输出:

>> line1
>> line2

11. --disable-gems

禁用所有 gem,只使用标准库。

ruby --disable-gems script.rb

12. -h--help

显示帮助信息,列出所有选项。

ruby --help

传递参数给脚本

脚本可以通过 ARGV 数组访问命令行参数。
示例脚本 args.rb

puts "脚本名:#{ $0 }"
puts "参数:#{ ARGV.join(", ") }"

运行:

ruby args.rb 你好 世界

输出:

脚本名:args.rb
参数:你好, 世界

处理中文的注意事项

在命令行中使用中文时,确保终端和脚本的编码匹配:

  • Linux/macOS:终端通常默认 UTF-8,无需额外设置。
  • Windows
  • 在 CMD 中运行 chcp 65001 切换到 UTF-8。
  • 或用 -E UTF-8 指定编码:
    bash ruby -E UTF-8 args.rb 你好 世界

实用示例

  1. 检查编码
   ruby -e 'puts "你好".encoding'

输出:UTF-8

  1. 批量处理文件
    假设有一个文件 data.txt
   你好
   世界

运行:

   ruby -n -E UTF-8 -e 'puts "行 #{$_.strip}"' data.txt

输出:

   行 你好
   行 世界
  1. 调试脚本
   ruby -w -d script.rb

下一步

  • 试试选项:告诉我你想测试哪个选项,我可以帮你设计一个例子。
  • 解决问题:如果某个选项用起来有问题,告诉我具体情况,我会帮你调试。
  • 深入学习:想了解脚本参数处理或更高级用法吗?我可以继续讲解。

你现在想试哪个命令行选项?或者有其他具体需求吗?