环境变量(huanjing / env)
读取和修改当前程序的环境变量。
cpro
daoru "huanjing"cpro
import "env"模块名可以写 huanjing 或 env,导入时用哪个,调用时就用哪个。
函数一览
| 拼音 | 英文 | 签名 | 说明 |
|---|---|---|---|
huoqu | get | (name zifuchuan) kexuan(zifuchuan) | 读取 |
shezhi | set | (name zifuchuan, value zifuchuan) zhenjia kecuo | 设置或覆盖 |
shanchu_bianliang | unset | (name zifuchuan) zhenjia kecuo | 删除 |
shezhi 和 shanchu_bianliang 成功时总是返回 zheng,这个返回值没有意义,直接忽略即可。
huoqu 读取
变量存在时返回它的值,不存在时返回 kong。不存在不算错误,不需要 changshi:
cpro
daoru "huanjing"
rukou() {
bl level = huanjing.huoqu("APP_LOG")
ruguo (level == kong) {
dayin("未设置日志级别,使用默认值 info")
} fouze {
dayin("日志级别:", jiebao(level, ""))
}
}cpro
import "env"
rukou() {
var level = env.get("APP_LOG")
if (level == none) {
print("未设置日志级别,使用默认值 info")
} else {
print("日志级别:", unwrap(level, ""))
}
}- 判断变量是否存在,请和
kong比较,不要看值是不是空字符串——父进程可能把变量设成了空值 - 值不是合法 UTF-8 时也返回
kong
shezhi 设置
设置变量,已存在则覆盖。只影响当前程序和它之后启动的子程序,不影响启动它的终端:
cpro
daoru "huanjing"
rukou() {
changshi {
huanjing.shezhi("APP_LOG", "debug")
} buhuo (e) {
dayin("设置失败:", e.xinxi)
}
}cpro
import "env"
rukou() {
try {
env.set("APP_LOG", "debug")
} catch (e) {
print("设置失败:", e.msg)
}
}失败的情况:
- 变量名为空,或包含
= - 值为空字符串:Windows 会把空值当作删除,为了两个平台结果一致,统一拒绝。要删除变量请用
shanchu_bianliang
只在变量不存在时才设置:
cpro
daoru "huanjing"
rukou() {
ruguo (huanjing.huoqu("APP_HOME") == kong) {
changshi {
huanjing.shezhi("APP_HOME", "/usr/local/app")
} buhuo (e) {
dayin(e.xinxi)
}
}
}cpro
import "env"
rukou() {
if (env.get("APP_HOME") == none) {
try {
env.set("APP_HOME", "/usr/local/app")
} catch (e) {
print(e.msg)
}
}
}shanchu_bianliang 删除
删除一个不存在的变量不算错误:
cpro
daoru "huanjing"
rukou() {
changshi {
huanjing.shanchu_bianliang("TEMP_FLAG")
} buhuo (e) {
dayin("删除失败:", e.xinxi)
}
}cpro
import "env"
rukou() {
try {
env.unset("TEMP_FLAG")
} catch (e) {
print("删除失败:", e.msg)
}
}拼音名不叫 shanchu,是因为 shanchu 是保留关键字。
错误码
| 错误码 | 含义 |
|---|---|
| 1 | 变量名不合法(为空或含 =) |
| 2 | 值为空字符串 |
| 3 | 内存不足 |
| 4 | 系统调用出错 |
注意事项
- 大小写:Linux 上变量名区分大小写,
Path和PATH是两个变量;Windows 上不区分 - 中文:变量名和值都可以用中文
- 多线程:环境变量是整个进程共享的,建议在程序启动时集中设置好
