打印按名称排序的环境变量,包括带换行符的变量

Igu*_*aut 4 bash environment-variables

我找不到针对此特定情况的现有答案:我只想显示按名称排序的所有导出的环境变量。通常我可以像这样简单地做到这一点:

$ env | sort
Run Code Online (Sandbox Code Playgroud)

但是,如果某些环境变量的值中包含换行符(就像我正在使用的 CI 系统上的情况一样),这将不起作用,因为多行值会与其他变量混淆。

smo*_*ors 6

bash 内置命令会export打印一个已排序的 envars 列表:

export -p | sed 's/declare -x //'
Run Code Online (Sandbox Code Playgroud)

类似地,要打印导出函数的排序列表(没有它们的定义):

export -f | grep 'declare -fx' | sed 's/declare -fx //' 
Run Code Online (Sandbox Code Playgroud)


Igu*_*aut 5

回答我自己的问题,因为我在其他地方找不到这个:

$ env -0 | sort -z | tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)

env -0用空字符分隔每个变量(这或多或少是它们已经在内部存储的方式)。 sort -z使用空字符代替换行符作为要排序的字段的分隔符,最后tr '\0' '\n'再次用换行符替换空字符。

注意:env -0sort -z是这些实用程序的 GNU coreutils 版本提供的非标准扩展。对如何使用 POSIX 执行此操作的其他想法sort持开放态度——我确信这是可能的,但它可能需要 for 循环或其他东西;不像单线那么容易。