以与多种实现兼容的posix兼容方式,如何打印当前定义的环境变量列表而不包含它们的值?
在某些实现(mksh,freebsd / bin / sh)上,只需单独使用即可export
:
$ export
FOO2
FOO
但是对于其他一些实现(bash,zsh,破折号),export
也会显示该值。例如,使用bash:
$ export
export FOO2='as df\
asdk=fja:\
asd=fa\
asdf'
export FOO='sjfkasjfd kjasdf:\
asdkj=fkajdsf:\
:askjfkajsf=asdfkj:\
safdkj'
$ printenv | sed -n l
FOO2=as\tdf\$
asdk=fja:\$
asd=fa\$
asdf$
FOO=sjfkasjfd kjasdf:\$
asdkj=fkajdsf:\$
\t:askjfkajsf=asdfkj:\$
safdkj$
其他选项(例如,env
或printenv
没有选项)仅显示不带值的变量名,至少在我尝试过的linux和freebsd平台上不行。
管道到awk / sed / etc。或使用参数扩展技术(例如${foo%%=*}
)修剪列表是可以接受的,但是它必须使用可能跨越行且值中带有=
空格的值(请参见上面的示例)。
特定于特定Shell实现的答案很有趣,但是我主要是在寻找在各个实现之间都兼容的东西。
export -p
?
export -p
因为那样可以在您说过的所有POSIX Shell中为您提供一致的输出。
export -p
不符合第一个要求-仅打印不带值的变量名。
export -p
。我不会编写该解析,因为在一般情况下,如果您有一个变量的值类似于,则还必须进行适当的引号解析hello\nexport var=value
。其中的几个,这将使你在所有的POSIX外壳一致的输出其它的命令是env
,但输出是很难解析,因为它缺乏export =
位。
export -p
POSIX指定的输出来生成也适用于Shell中输入的输出。