小编Jua*_*uan的帖子

posix shell:打印环境变量名称列表(无值)

以与多个实现一起使用的 posix 兼容方式,如何打印当前定义的环境变量列表而没有它们的值?

在某些实现(mksh、freebsd /bin/sh)上,仅使用export本身就符合要求:

$ export
FOO2
FOO
Run Code Online (Sandbox Code Playgroud)

但是对于其他一些实现(bash、zsh、dash),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$
Run Code Online (Sandbox Code Playgroud)

其他选项如envprintenv没有选项只打印没有值的变量名,至少在我尝试过的 linux 和 freebsd 平台上没有。

管道到 awk/sed/等。或者使用参数扩展技术(例如,${foo%%=*})修剪列表是可以接受的,但它必须处理可能跨越行并且值中包含=空格的值(参见上面的示例)。

特定于特定 shell 实现的答案很有趣,但我主要是在寻找跨实现兼容的东西。

shell bash environment-variables posix

13
推荐指数
1
解决办法
4626
查看次数

标签 统计

bash ×1

environment-variables ×1

posix ×1

shell ×1