【发布时间】:2021-11-14 08:34:37
【问题描述】:
$ export MYVAR=$(echo -e "something\nMYVAR=10")
$ env
...
MYVAR=something
MYVAR=10
...
上面的代码显示了问题。 如果您尝试使用简化版本阅读此内容(很多人都这样做),您将得到错误的值。这解释了它:
$ env | while IFS== read var value; do
[ "$var" == "MYVAR" ] && echo $value
done
someting
10
经过长时间的调查,我想知道bash 或sh 是否根本无法处理这种情况。
如果我能得到一个没有值的变量列表,我可以解决它,但看起来没有外部任务(例如 python)我做不到......
问题:如何在 shell 中获取环境变量列表及其值,这些值适用于上述示例?
【问题讨论】:
-
从
env的输出中,您无法分辨什么是赋值,什么是值,即使在 python 中也是如此。使用env -0。 -
@choroba 错了。在 python 中,您可以调用
for k, v in os.environ.items()并以适当的方式获取它们。然后我可以从脚本调用这样的脚本并获取变量,但我不想这样做。我正在寻找一个纯粹的 bash 解决方案。 -
使用
os.environ不是使用“env的输出”:-)