在 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
用于逐行处理输入,类似 awk
或 sed
。
-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 你好 世界
实用示例
- 检查编码:
ruby -e 'puts "你好".encoding'
输出:UTF-8
。
- 批量处理文件:
假设有一个文件data.txt
:
你好
世界
运行:
ruby -n -E UTF-8 -e 'puts "行 #{$_.strip}"' data.txt
输出:
行 你好
行 世界
- 调试脚本:
ruby -w -d script.rb
下一步
- 试试选项:告诉我你想测试哪个选项,我可以帮你设计一个例子。
- 解决问题:如果某个选项用起来有问题,告诉我具体情况,我会帮你调试。
- 深入学习:想了解脚本参数处理或更高级用法吗?我可以继续讲解。
你现在想试哪个命令行选项?或者有其他具体需求吗?
发表回复