它的作用和内容不清楚。我尝试 grep set 和 env 的输出,以查看系统上其他地方的 C 或 LANG 设置。它是如何被使用或设置的,却一无所知。我甚至不知道我应该从哪个手册页开始阅读。
当我尝试解码不同 Linux 机器上的启动脚本时,任何帮助都非常有用。如果有人能推荐一些有助于此过程的优质资源(书籍、文档),我将不胜感激。
在 centos6 机器上使用 LANG=C 的脚本示例
$ grep -i LANG=C ./* ./halt:LANG=C __umount_loop '$2 ~ /^\/$|^\/proc|^\/dev/{next} ./netconsole:路由=$(LANG=C ip -o 路由到达$host/32) ./netconsole:arp=$(LANG=C /sbin/arping -c 1 -I $DEV $target 2>/dev/null | awk'/回复来自.*[.*]/{print gensub(".*回复来自.* \\[(.*)\\].*","\\1","G")}') ./netconsole:SYSLOGADDR=$(LANG=C 主机 $SYSLOGADDR 2>/dev/null | awk'/has 地址 / { 打印 $NF }') ./网络:LANG=C sed -e “$__sed_discard_ignored_files” \ ./网络:LANG=C 排序-k 1,1-k 2n|\ ./网络:LANG=C sed's//') ./网络:eval $(LANG=C fgrep“DEVICE=”ifcfg-$i) ./网络:eval $(LANG=C fgrep“TYPE=”ifcfg-$i) ./网络:eval $(LANG=C fgrep“SLAVE=”ifcfg-$i) ./network: 如果 LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]!" ifcfg-$i > /dev/null ; 然后 ./network: 如果 ! LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]!" ifcfg-$i >/dev/null 2>&1 ; 然后 ./网络:eval $(LANG=C fgrep“DEVICE=”ifcfg-$i) ./网络:eval $(LANG=C fgrep“TYPE=”ifcfg-$i) ./rpcbind:# 我们无法在启动时在普通控制台上使用日语,因此强制 LANG=C。 ./rpcbind: LANG=C
Ubuntu 10.04 机器上的脚本使用示例
$ grep -i LANG=C ./* ./apache2:ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin" ./exim4:LANG=C ./ntop:导出 LANG=C\
答案1
它强制应用程序使用默认语言进行输出,并强制按字节排序。
$ LANG=es_ES man
¿Qué página de manual desea?
$ LANG=C man
What manual page do you want?
$ LANG=en_US sort <<< $'a\nb\nA\nB'
a
A
b
B
$ LANG=C sort <<< $'a\nb\nA\nB'
A
B
a
b
答案2
正如前面所解释的,LANG
环境变量控制本地化。
它影响许多标准命令行工具,如sort
,,grep
。awk
将其值设置为“C”会告诉所有这些工具仅考虑基本 ASCII 字符并禁用 UTF-8 多字节匹配。
除了本地化之外,使用该环境变量的另一个很好的理由是性能:它可以使版本 <2.7 的grep
速度提高 1000 倍:grep
http://rg03.wordpress.com/2009/09/09/gnu-grep-is-slow-on-utf-8/
关于为什么使用字母“C”来指定“安全”的基本语言环境,请参阅为什么是“LANG=C”?(而不是 D 或 E 或 F)。
答案3
LANG=C 是一种禁用本地化的方法。它在脚本中用于预测程序输出,这些输出可能因当前语言而异。有关更多信息,请阅读这