LANG=C 位于许多 /etc/init.d/* 脚本中。LANG=C 有什么作用,为什么需要设置 LANG=C。

nel*_*aro 10 linux boot bash environment-variables init

它不清楚它做什么或它包含什么。我尝试搜索 set 和 env 的输出,以查看系统上其他地方的 C 或 LANG 设置。关于它是如何使用或设置的,尚不清楚。我什至不知道我应该开始阅读哪个手册页。

当我尝试解码不同 Linux 机器上的启动脚本时,这里的任何帮助都会很棒。如果有人可以推荐有助于完成此过程的良好资源(书籍、文档),我们将不胜感激。

在 centos6 机器上使用 LANG=C 的脚本示例

$ grep -i LANG=C ./*
./halt:LANG=C __umount_loop '$2 ~ /^\/$|^\/proc|^\/dev/{next}
./netconsole: route=$(LANG=C ip -o route get to $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 address / { print $NF }')
./network: LANG=C sed -e "$__sed_discard_ignored_files" \
./network: LANG=C sort -k 1,1 -k 2n | \
./network: LANG=C sed 's/ //')
./network: eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
./network: eval $(LANG=C fgrep "TYPE=" ifcfg-$i)
./network: eval $(LANG=C fgrep "SLAVE=" ifcfg-$i)
./network: if LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; 然后
./网络:如果!LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; 然后
./network: eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
./network: 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:export LANG=C\

Ign*_*ams 15

它强制应用程序使用默认语言进行输出,并强制按字节排序。

$ 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
Run Code Online (Sandbox Code Playgroud)


Luc*_*mon 7

如前所述,LANG环境变量控制本地化。

它会影响许多标准命令行工具,例如sortgrepawk

将其值设置为“C”会告诉所有这些工具只考虑基本的 ASCII 字符并禁用 UTF-8 多字节匹配。

使用该环境变量的本地化的另一个很好的原因是性能:它可以使版本 < 2.7 的grep速度提高 1000 倍grephttp : //rg03.wordpress.com/2009/09/09/gnu-grep-is-slow-on- utf-8/

关于字母“C”用于指定“安全”基本语言环境的原因,请参阅为什么“LANG=C”?(不是 D 或 E 或 F)