gpt4 book ai didi

unix - 在 POSIX sh 中循环环境变量

转载 作者:行者123 更新时间:2023-12-01 04:50:55 25 4
gpt4 key购买 nike

我需要遍历环境变量并在 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

它大部分时间都有效,除非环境变量包含换行符。我需要它在这种情况下工作。

我知道 -0标志为 env用 nul 而不是换行符分隔变量,但如果我使用该标志,我如何循环每个变量? 编辑 :@chepner 指出 POSIX env 不支持 -0 ,就这样了。

任何使用可移植 linux 实用程序的解决方案都是好的,只要它在 POSIX sh 中工作即可。

最佳答案

没有办法解析 env 的输出充满信心;考虑这个输出:

bar=3
baz=9

我可以用两种不同的环境来制作它:
$ env -i "bar=3" "baz=9"
bar=3
baz=9
$ env -i "bar=3
> baz=9"
bar=3
baz=9

是不是两个环境变量, barbaz ,用简单的数值,或者是一个变量 bar$'3\nbaz=9' (使用 bash 的 ANSI 引用样式)?

您可以使用 POSIX 安全访问环境 awk ,但是,使用 ENVIRON大批。例如:
awk 'END { for (name in ENVIRON) {
print "Name is "name;
print "Value is "ENVIRON[name];
}
}' < /dev/null

使用此命令,您可以区分上面提到的两种环境。
$ env -i "bar=3" "baz=9" awk 'END { for (name in ENVIRON) { print "Name is "name; print "Value is "ENVIRON[name]; }}' < /dev/null
Name is baz
Value is 9
Name is bar
Value is 3
$ env -i "bar=3
> baz=9" awk 'END { for (name in ENVIRON) { print "Name is "name; print "Value is "ENVIRON[name]; }}' < /dev/null
Name is bar
Value is 3
baz=9

关于unix - 在 POSIX sh 中循环环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41898503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com