考虑到我想以编程方式阅读交互式shell的环境。现在,启动外壳程序,运行/usr/bin/env
并捕获其输出似乎是一个不错的解决方案。但是直到直到我们意识到变量值可以有换行符为止:
$ export LINE0='VALUE0
> LINE1=VALUE1'
$ env | grep ^LINE
LINE0=VALUE0
LINE1=VALUE1
因此,捕获env -0
(-NULL
分隔的条目)的输出似乎是一种更好的方法,但这仅适用于GNU env
,因此大多数情况是特定于Linux的。
是否有任何便携式(POSIX或BSD)的方式来获取NULL
环境变量-分隔列表,只使用标准的命令行工具(可以使用awk
,但没有perl
/ python
/ruby
允许的)?
我不知道您打算如何恢复捕获的环境,因为除了zsh之外,没有外壳程序在其变量中支持nul字节。
无论如何,您都可以使用awk
转义符\
as\\
和换行符\n
,而仍然使用换行符来分隔name=val
条目:
awk 'BEGIN{
for(e in ENVIRON){
v = e "=" ENVIRON[e];
gsub(/\\/, "&&", v); gsub(/\n/,"\\n",v); print v
}
}'
fzd$ env - $'foo\\bar\nquux=foo\\bar\nquux' lol=cat printenv
lol=cat
foo\bar
quux=foo\bar
quux
fzd$ env - $'foo\\bar\nquux=foo\\bar\nquux' lol=cat awk 'BEGIN{
for(e in ENVIRON){
v = e "=" ENVIRON[e];
gsub(/\\/, "&&", v); gsub(/\n/,"\\n",v); print v
}
}'
foo\\bar\nquux=foo\\bar\nquux
lol=cat
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句