【发布时间】:2017-06-13 09:39:33
【问题描述】:
我需要遍历环境变量并在 POSIX sh(不是 bash)中获取它们的名称和值。这是我目前所拥有的。
#!/usr/bin/env sh
# Loop over each line from the env command
while read -r line; do
# Get the string before = (the var name)
name="${line%=*}"
eval value="\$$name"
echo "name: ${name}, value: ${value}"
done <<EOF
$(env)
EOF
它在大多数情况下都有效,除非环境变量包含换行符。我需要它在这种情况下工作。
我知道 env 的 -0 标志用 nul 而不是换行符分隔变量,但如果我使用该标志,如何循环遍历每个变量? 编辑:@chepner 指出 POSIX env 不支持 -0,所以就这样了。
任何使用便携式 linux 实用程序的解决方案都很好,只要它在 POSIX sh 中工作即可。
【问题讨论】:
-
假设
POSIXenv根据需要生成\0分隔输出,您打算如何使用脚本进行解析,POSIXread不支持 de-lmiter @987654330 @ 也不是-0支持xargs -
一般来说,你甚至不能假设
name是一个有效的变量名。运行env "foo bar=3"并检查输出。 -
POSIX
env无论如何都不支持-0。 -
@chepner 对无效的变量名很感兴趣。理想情况下,该解决方案将检查某些东西是否是有效变量(或以不同的方式获取名称)。此外,我编辑了我的问题以解决我在
-0标志上的错误。
标签: unix environment-variables sh