Jus*_*ard 3 unix environment-variables sh
我需要遍历环境变量,并在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
Run Code Online (Sandbox Code Playgroud)
它大部分时间都可以工作,除非环境变量包含换行符。在这种情况下,我需要它来工作。
我知道用nul而不是换行符分隔变量的-0标志env,但是如果使用该标志,如何遍历每个变量? 编辑:@chepner指出POSIX env不支持-0,所以可以了。
只要使用POSIX sh,任何使用可移植linux实用程序的解决方案都是好的。
无法env完全自信地解析的输出。考虑以下输出:
bar=3
baz=9
Run Code Online (Sandbox Code Playgroud)
我可以在两种不同的环境下生产这种产品:
$ env -i "bar=3" "baz=9"
bar=3
baz=9
$ env -i "bar=3
> baz=9"
bar=3
baz=9
Run Code Online (Sandbox Code Playgroud)
是两个环境变量bar和和baz,具有简单的数字值,还是一个bar具有值的变量$'3\nbaz=9'(使用bashANSI引用样式)?
您可以放心地使用POSIX访问环境awk,但是,使用ENVIRON数组。例如:
awk 'END { for (name in ENVIRON) {
print "Name is "name;
print "Value is "ENVIRON[name];
}
}' < /dev/null
Run Code Online (Sandbox Code Playgroud)
使用此命令,您可以区分上述两种环境。
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |