基本上,如何在 Bash 中实现这一点?解析locale- declare "$(locale | grep ^LC_CTYPE | tr --delete '"')"- 的输出似乎很糟糕,因为它涉及四个单独的命令。请记住,仅仅因为locale打印大多数或所有变量的值并不意味着这些变量实际上已设置!例如,在我的机器上locale打印LC_CTYPE="en_NZ.UTF-8"(以及其他行),但echo "$LC_CTYPE"什么也不打印。
假设评估 的输出locale是安全的(我们假设locale不是 shell 函数、别名或其他非标准实用程序):
(eval "$(locale)" && printf '%s\n' "$LC_CTYPE")
Run Code Online (Sandbox Code Playgroud)
这会设置子 shell 环境中的所有LC_相关变量并输出变量的值LC_CTYPE。在子 shell 内部执行eval可以避免变量污染父环境LC_。
在我的 OpenBSD 系统上运行的示例,我只设置过LANG=C.UTF-8:
$ (eval "$(locale)" && printf '%s\n' "$LC_CTYPE")
C.UTF-8
Run Code Online (Sandbox Code Playgroud)
如果您想将变量设置(并导出)LC_CTYPE为报告的值locale而不设置其他变量:
$ export LC_CTYPE="$(eval "$(locale)" && printf '%s\n' "$LC_CTYPE")"
$ printf '%s\n' "$LC_CTYPE"
C.UTF-8
Run Code Online (Sandbox Code Playgroud)