在linux中,应使用env或printenv配合while read解析环境变量,避免用for循环直接遍历$(env);env输出key=value格式,ifs='='可安全分离键值,grep -e '^(key)='可精准过滤变量名。

在 Linux 中,环境变量是键值对形式的字符串,不能直接用普通 for 循环遍历所有变量名和值。但可以通过组合 shell 命令提取变量名,再逐个取值打印。
用 env 或 printenv 列出所有环境变量
env 和 printenv 都能显示全部环境变量(格式为 KEY=VALUE)。这是最可靠的数据源,比解析 set 输出更干净(set 会混入 shell 函数和局部变量)。
示例命令:
-
env—— 显示所有环境变量 -
printenv—— 功能同env,部分系统行为更一致
用 while read 逐行解析并打印变量名与值
因为 env 输出每行是 KEY=VALUE,可用 while read 拆分,并用 printf 或 echo 安全输出:
env | while IFS='=' read -r key value; do
printf '%s → %s
' "$key" "$value"
done
说明:
-
IFS='='设置字段分隔符为等号,让read把第一段当key,其余当value -
-r防止反斜杠被转义,保证值内容不被误改 -
"$key"和"$value"加双引号避免空格或特殊字符导致格式错乱
如果只想打印特定变量(如含某关键词的)
可在管道中加 grep 过滤,例如只看以 PATH、HOME 开头的变量:
env | grep -E '^(PATH|HOME|USER|SHELL)=' | while IFS='=' read -r k v; do
echo "$k = $v"
done
注意:grep -E '^(KEY1|KEY2)=' 中的 = 能避免匹配到变量值里含关键词的情况(比如 MY_PATH 不会被 PATH 误中)。
不推荐:用 for var in $(env)
这种写法会把整个 env 输出按空白符切分,导致含空格、换行、星号等的变量值被破坏,且无法准确分离键和值。例如 PS1=$'\u@h:\w\$ ' 会被切成多段,完全不可用。
务必避免:
for i in $(env); do ...for v in $(printenv); do ...











