[英]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 -0
和sort -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.