Skip to content

环境变量(huanjing / env) ​

读取和修改当前程序的环境变量。

cpro
daoru "huanjing"
cpro
import "env"

模块名可以写 huanjing 或 env,导入时用哪个,调用时就用哪个。

函数一览 ​

拼音英文签名说明
huoquget(name zifuchuan) kexuan(zifuchuan)读取
shezhiset(name zifuchuan, value zifuchuan) zhenjia kecuo设置或覆盖
shanchu_bianliangunset(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 上不区分
  • 中文:变量名和值都可以用中文
  • 多线程:环境变量是整个进程共享的,建议在程序启动时集中设置好

cpro 目前处于测试阶段