在Mac终端中可用env命令临时设置环境变量运行脚本而不污染当前会话,如env API_ENV=staging ./deploy.sh;传多个变量用空格分隔,清空继承变量需加-i并显式指定PATH;扩展PATH时用$(printenv PATH)并保留双引号。

在Mac终端中,想让某个脚本临时使用特定环境变量运行,又不污染当前shell会话,直接用env命令加参数即可实现,不需要修改~/.zshrc或反复export/unset。
基本用法:用env传单个环境变量
在终端输入:env VAR_NAME=value ./script.sh,例如env API_ENV=staging ./deploy.sh。
这会启动一个新进程,在该进程的环境中设置API_ENV为staging,脚本执行完后变量自动消失,不影响当前终端。
传多个环境变量
方法一:连续写多个KEY=VALUE,用空格分隔:env FOO=bar BAR=baz ./test.sh。
方法二:用-i选项清空所有继承的环境变量(包括PATH),只保留你显式指定的——但要注意:如果没手动带上PATH,脚本里调用的命令(如python、curl)会报“command not found”:env -i PATH="/usr/bin:/bin" MY_VAR=123 ./run.sh。
【必须显式传入PATH,否则脚本内无法调用任何外部命令】
结合现有环境变量扩展使用
有时需要保留当前PATH,并额外添加一个变量。这时不能用-i,而要用$(printenv PATH)引用原值:env PATH="$(printenv PATH):/my/custom/bin" EXTRA_FLAG=true ./launch.sh。
注意:双引号必须保留,否则shell会把PATH值按空格切开,导致路径断裂;如果PATH里含空格(极少见),这种写法仍可能出错,但日常开发中几乎遇不到。
避免变量泄露:用env执行子shell
第一步:输入env→第二步:观察当前所有环境变量输出→第三步:确认无敏感信息(如AWS_SECRET_ACCESS_KEY)被意外带入→第四步:在env命令前加env -i强制清空,再逐个重设所需变量。
这一步特别关键:如果你从一个已配置了密钥的shell中直接运行env MY_VAR=1 ./upload.sh,脚本仍能读到AWS_*系列变量——除非你主动用-i隔离。

















