【Ruby学习笔记】2.Ruby 中文编码、命令行选项及环境变量

前言

本章介绍Ruby的中文编码、命令性选项及环境变量。

Ruby 中文编码

前面章节中我们已经学会了如何用 Ruby 输出 “Hello, World!”,英文没有问题,但是如果你输出中文字符"你好,世界"就有可能会碰到中文编码问题。

Ruby 文件中如果未指定编码,在执行过程会出现报错:

#!/usr/bin/ruby -w

puts "你好,世界!";

以上程序执行输出结果为:

invalid multibyte char (US-ASCII) 

以上出错信息显示了 Ruby 使用用 ASCII 编码来读源码,中文会出现乱码,解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*-(EMAC写法) 或者 #coding=utf-8 就行了。

实例

#!/usr/bin/ruby -w
# -*- coding: UTF-8 -*-
 
puts "你好,世界!";

输出结果为:

你好,世界!

所以如果大家再学习过程中,源代码文件中,若包含中文编码,则需要注意两点:

  1. 必须在首行添加 # -*- coding: UTF-8 -*-,告诉解释器使用utf-8来解析源码。
  2. 必须设置编辑器保存文件的编码为utf-8。

Ruby 命令行选项

Ruby 一般是从命令行运行,方式如下:

$ ruby [ options ] [.] [ programfile ] [ arguments ... ]

解释器可以通过下列选项被调用,来控制解释器的环境和行为。

选项描述
-a与 -n 或 -p 一起使用时,可以打开自动拆分模式(auto split mode)。请查看 -n 和 -p 选项。
-c只检查语法,不执行程序。
-C dir在执行前改变目录(等价于 -X)。
-d启用调试模式(等价于 -debug)。
-F pat指定 pat 作为默认的分离模式($;)。
-e prog指定 prog 作为程序在命令行中执行。可以指定多个 -e 选项,用来执行多个程序。
-h显示命令行选项的一个概览。
-i [ ext]把文件内容重写为程序输出。原始文件会被加上扩展名 ext 保存下来。如果未指定 ext,原始文件会被删除。
-Idir 添加 dir 作为加载库的目录。
-K [ kcode]指定多字节字符集编码。e 或 E 对应 EUC(extended Unix code),s 或 S 对应 SJIS(Shift-JIS),u 或 U 对应 UTF-8,a、A、n 或 N 对应 ASCII。
-l启用自动行尾处理。从输入行取消一个换行符,并向输出行追加一个换行符。
-n把代码放置在一个输入循环中(就像在 while gets; … end 中一样)。
-0[ octal]设置默认的记录分隔符($/)为八进制。如果未指定 octal 则默认为 \0。
-p把代码放置在一个输入循环中。在每次迭代后输出变量 $_ 的值。
-r lib使用 require 来加载 lib 作为执行前的库。
-s解读程序名称和文件名参数之间的匹配模式 -xxx 的任何参数作为开关,并定义相应的变量。
-T [level]设置安全级别,执行不纯度测试(如果未指定 level,则默认值为 1)。
-v显示版本,并启用冗余模式。
-w启用冗余模式。如果未指定程序文件,则从 STDIN 读取。
-x [dir]删除 #!ruby 行之前的文本。如果指定了 dir,则把目录改变为 dir。
-X dir在执行前改变目录(等价于 -C)。
-y启用解析器调试模式。
–copyright显示版权声明。
–debug启用调试模式(等价于 -d)。
–help显示命令行选项的一个概览(等价于 -h)。
–version显示版本。
–verbose启用冗余模式(等价于 -v)。设置 $VERBOSE 为 true。
–yydebug启用解析器调试模式(等价于 -y)。

单字符的命令行选项可以组合使用。下面两行表达了同样的意思:

$ ruby -ne 'print if /Ruby/' /usr/share/bin


$ ruby -n -e 'print if /Ruby/' /usr/share/bin

Ruby 环境变量

Ruby 解释器使用下列环境变量来控制它的行为。ENV 对象包含了所有当前设置的环境变量列表。

变量描述
DLN_LIBRARY_PATH动态加载模块搜索的路径。
HOME当没有参数传递给 Dir::chdir 时,要移动到的目录。也用于 File::expand_path 来扩展 “~”。
LOGDIR当没有参数传递给 Dir::chdir 且未设置环境变量 HOME 时,要移动到的目录。
PATH执行子进程的搜索路径,以及在指定 -S 选项后,Ruby 程序的搜索路径。每个路径用冒号分隔(在 DOS 和 Windows 中用分号分隔)。
RUBYLIB库的搜索路径。每个路径用冒号分隔(在 DOS 和 Windows 中用分号分隔)。
RUBYLIB_PREFIX用于修改 RUBYLIB 搜索路径,通过使用格式 path1;path2 或 path1path2,把库的前缀 path1 替换为 path2。
RUBYOPT传给 Ruby 解释器的命令行选项。在 taint 模式时被忽略(其中,$SAFE 大于 0)。
RUBYPATH指定 -S 选项后,Ruby 程序的搜索路径。优先级高于 PATH。在 taint 模式时被忽略(其中,$SAFE 大于 0)。
RUBYSHELL指定执行命令时所使用的 shell。如果未设置该环境变量,则使用 SHELL 或 COMSPEC。

对于 Unix,使用 env 命令来查看所有环境变量的列表。

HOSTNAME=ip-72-167-112-17.ip.secureserver.net
RUBYPATH=/usr/bin
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=122.169.131.179 1742 22
SSH_TTY=/dev/pts/1
USER=amrood
JRE_HOME=/usr/java/jdk/jre
J2RE_HOME=/usr/java/jdk/jre
PATH=/usr/local/bin:/bin:/usr/bin:/home/guest/bin
MAIL=/var/spool/mail/guest
PWD=/home/amrood
INPUTRC=/etc/inputrc
JAVA_HOME=/usr/java/jdk
LANG=C
HOME=/root
SHLVL=2
JDK_HOME=/usr/java/jdk
LOGDIR=/usr/log/ruby
LOGNAME=amrood
SSH_CONNECTION=122.169.131.179 1742 72.167.112.17 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
RUBYLIB=/usr/lib/ruby
G_BROKEN_FILENAMES=1
_=/bin/env
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海棠赠微雨.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值