繁体   English   中英

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

[英]print environment variables sorted by name including variables with newlines

我找不到这个特定案例的现有答案:我想简单地显示所有导出的环境变量,按它们的名称排序。 通常我可以像这样简单地做到这一点:

$ env | sort

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

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

export -p | sed 's/declare -x //'

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

export -f | grep 'declare -fx' | sed 's/declare -fx //' 

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

$ env -0 | sort -z | tr '\0' '\n'

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

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

env | sort -f

为我工作。

-f 选项使排序忽略大小写,这可能是您 99% 的时间想要的

env -0不可用的有限环境中,例如。 Alpine 3.13、3.14(命令是简化的busybox版本)您可以使用awk

awk 'BEGIN { for (K in ENVIRON) { printf "%s=%s%c", K, ENVIRON[K], 0; }}' | sort -z | tr '\0' '\n'

这使用awk打印每个以null终止的环境变量,模拟env -0 请注意,将 ORS 设置为 null ( -vORS='\0' ) 在 awk 的这个有限版本中不起作用,在 ZAFA0FF8B27B87666A6BDE87251C5FDE 中直接打印\0 0不起作用,因此打印 7 %c
答案的其余部分与上面的答案相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM