MacOS终端source .env文件时带$符号的环境变量值转义异常问题
问题原因
你遇到的解析异常和双引号的shell解析规则直接相关:
- shell环境中,双引号属于弱引用,会自动解析内部以
$开头的变量、位置参数、算术表达式等特殊符号,不会将$作为普通字符处理。 - 你的
BUZZ赋值内容中$2、$1、$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk都会被shell识别为待解析的变量/位置参数:$2是shell的第2位位置参数,你执行source命令时没有传入额外参数,$2取值为空,因此$2a解析结果为a$1是shell的第1位位置参数,无传参时取值为空,因此$10解析结果为0$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk是未定义的自定义变量,默认取值为空
- 三部分解析结果拼接后就得到了你看到的
a0.pQJ4oYWP.m4qdRKRQlyO输出。
解决方案
有两种方式可以保留原始值:
- 使用单引号包裹取值:单引号属于强引用,不会解析内部任何特殊字符,直接按字面量处理
export BUZZ='$2a$10$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk.pQJ4oYWP.m4qdRKRQlyO'
- 双引号内对所有
$添加转义符\,强制将$识别为普通字符
export BUZZ="\$2a\$10\$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk.pQJ4oYWP.m4qdRKRQlyO"
修改后重新执行source .env即可读取到正确的BUZZ值。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

