linux lc all 写中文,关于linux:解释export LANG,LC_CTYPE,LC_ALL的效果

我刚刚安装了Linux Mint 17并遇到了一个问题,我无法在终端中使用俄语。 (我看到?而不是字母)。 在一个论坛上我发现了这个解决方案

Added in ~/.profile:

export LANG=ru_RU.UTF-8

export LC_CTYPE=ru_RU.UTF-8

export LC_ALL=ru_RU.UTF-8

它有所帮助,但也将我的界面语言改为俄语(我不想要)。 这甚至不是问题,但无论如何,我想知道,这段代码是如何工作的(每一行)。

谢谢。

我觉得有点笼统。 在这里,从顶部开始:gnu.org/software/libc/manual/html_node/Locales.html

我回滚了一个编辑,添加了不必要的等宽格式,例如 Linux Mint 17,尽管解决了一些问题。 我很乐意对这个决定提出质疑,特别是来自@Kunaikurenai,或批准编辑的三个人。

也许是一个有用的资源,因为Linux Mint基于Ubuntu / Debian:wiki.debian.org/Locale

我将详细解释:

export LANG=ru_RU.UTF-8

这是一个shell命令,它将导出一个名为LANG的环境变量,其值为ru_RU.UTF-8。这指示国际化程序使用俄语(ru),俄罗斯(ru)的变体和控制台输出的UTF-8编码。

通常这条单线足够了。

另一个:

export LC_CTYPE=ru_RU.UTF-8

有类似的事情,但它告诉程序不要改变语言,但只有CTYPE到俄语。如果程序可以将文本更改为大写,那么它将使用俄语规则来执行此操作,即使文本本身可能是英语。

值得一提的是,混合LANG和LC_CTYPE会产生意想不到的结果,因为很少有人这样做,所以它是非常未经测试的,除非可能:

export LANG=ru_RU.UTF-8

export LC_CTYPE=C

这将使程序输出俄语,但CTYPE标准旧C风格。

最后一行LC_ALL是最后一个覆盖,它将使程序忽略所有其他LC_*变量并使用它。我认为你不应该在配置文件中写它,而是用它来运行给定语言的程序。例如,如果要编写错误报告,并且不希望任何类型的本地化输出,并且您不知道设置了哪些LC_*变量:

LC_ALL=C program

关于更改所有程序的语言或仅更改控制台,这取决于您放置这些行的位置。我把它放在~/.bashrc中,所以它们不适用于GUI,只适用于bash控制台。

这里唯一缺少的信息是他的问题的解决方案。 不能使用俄语字符表示他没有使用unicode编码,所以LANG=en_US.UTF-8应该允许这样做而不改变界面语言。

请参阅UNIX规范的环境变量页面:

LANG This variable determines the locale category for native language,

local customs and coded character set in the absence of the LC_ALL and

other LC_* (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY,

LC_NUMERIC, LC_TIME) environment variables. This can be used by

applications to determine the language to use for error messages and

instructions, collating sequences, date formats, and so forth.

LC_ALL This variable determines the values for all locale categories.

The value of the LC_ALL environment variable has precedence over any

of the other environment variables starting with LC_ (LC_COLLATE,

LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) and the LANG

environment variable.

LC_CTYPE This variable determines the locale category for character

handling functions, such as tolower(), toupper() and isalpha(). This

environment variable determines the interpretation of sequences of

bytes of text data as characters (for example, single- as opposed to

multi-byte characters), the classification of characters (for example,

alpha, digit, graph) and the behaviour of character classes.

Additional semantics of this variable, if any, are

implementation-dependent.

这并不能解释export效应

export令人困惑。它的确意味着mark-for-export。

它意味着稍后将创建子进程,这就是实际导出完成的时间。

export事件的顺序是:1-ASSIGN,MARK和...... 2-FORK。

1)创建一个新的本地shell变量,为其赋值,并标记此变量以便以后导出。

2)然后,当前shell脚本是FORKED(即创建并运行任何子进程),然后使用此导出变量的COPY启动子进程,作为其中一个环境变量之一。

nb(注意):直到第2步,并且可能在发出export声明之后很久,变量才真正被导出。所以:export只标记LANG。它不会导出LANG。

按照惯例,导出的变量以大写字母命名。

因为LANG只是一个副本,如果孩子稍后修改了这个变量,它只会为自己修改它。父母没有看到孩子的修改。

请注意,还有许多其他环境变量从父进程传递给子进程。这些包括父进程也从其父进程获取的所有其他环境变量。

所以孩子继承了所有父母的环境变量,

+父标记为export的任何其他标记,

- 减去任何明确unset的变量。

换句话说,我们有两个需要考虑的过程:父进程和任何未来的子进程。

您正在运行的流程(在本例中为profile)就是我们称之为"父流程"的流程。

profile可以生成一个或多个子进程,例如,如果您在配置文件中执行的操作之一是运行程序。然后(通常)该程序作为profile的子进程运行。 (如果文件是在配置文件中使用.或source表示法来源,则不是这样,其中sourced在与profile相同的进程中运行。)

export LANG=ru_RU.UTF-8

export LC_CTYPE=ru_RU.UTF-8

export LC_ALL=ru_RU.UTF-8

现在让我们来看看这三个环境变量的影响。

LANG是用户通常设置的,以影响程序运行的语言。在终端中,如果输入env | grep LANG,您应该看到LANG设置为_.,例如LANG =的en_US.UTF-8。

LC_CTYPE是LANG的覆盖,并且仅覆盖使用的字符集。 LANG的所有其他功能(类别)仍然由LANG设置使用,例如LC_TELEPHONE。

LC_ALL是另一个覆盖。它会覆盖LC_CTYPE和LANG设置的给定语言和代码集的所有语言环境类别。请注意,LC_ALL永远不应该持久设置,就像配置文件本身一样。它仅作为临时整个语言环境覆盖,即它覆盖所有类别,如LC_TELEPHONE,LC_MONETARY,LC_CTYPE等。

LANG,LC_CTYPE和LC_ALL是特殊的环境变量,在它们导出到shell环境(help export)之后,它们可用并且可以被支持区域设置的某些程序读取(自然语言格式化)对于C)。

每个变量为特定的例程集设置C库的自然语言格式样式的概念,例如:

LC_ALL - Set the entire locale generically

LC_CTYPE - Set a locale for the ctype and multibyte functions. This controls recognition of upper and lower case, alphabetic or non-alphabetic characters, and so on.

和其他如LC_COLLATE(用于字符串整理程序),LC_MESSAGES(用于消息目录),LC_MONETARY(用于格式化货币值),LC_NUMERIC(用于格式化数字),LC_TIME(用于格式化日期和次)。

关于LANG,它用作任何未设置的LC_*变量的替代(参见:man locale)。

参见:man setlocale(BSD),man locale

因此,当调用某些C函数(例如setlocale,ctype,multibyte,catopen,printf等)时,它们会从配置文件和本地环境中读取区域设置以便控制并根据C编程语言标准格式化自然语言格式化样式(参见:ISO C99)

另请参见:C库 - 。

您的.bashrc文件是第一个要读取的文件之一,它包含shell会话的各种配置。

来自.bashrc,.bash_profile和.environment之间的区别是什么?:

.bashrc is only read by a shell that's both interactive and non-login

如定义带或不带导出的变量中所述:

export makes the variable available to sub-processes.

要么

Specifically export makes the variable available to child processes via the environment.

Moar

阅读关于.bash_profile,.bashrc的@lhunath回答,以及写入别名的位置?

使用点文件配置登录会话

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值