Collation order throughLC_COLLATE
不仅定义了单个字符的排序顺序,还定义了字符范围的含义。或者是吗?考虑以下片段:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
Run Code Online (Sandbox Code Playgroud)
直观地说,B
不是 in [a-z]
,所以这不应该输出任何东西。这就是 Ubuntu 8.04 或 10.04 上发生的事情。但是在一些运行 Debian lenny 或挤压的机器上,B
可以找到,因为范围a-z
包括排序顺序之间a
和z
排序顺序中的所有内容,包括大写字母B
到Z
.
所有测试的系统都en_US
生成了语言环境。我还尝试改变语言环境:在B
上面匹配的机器上,{en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}
除了日语(任何可用的编码)和C
/之外的每个可用语言环境(主要基于拉丁语:,还有中文语言环境)都会发生同样的情况POSIX
。
当您超越 ASCII 时,字符范围在正则表达式中意味着什么?为什么一方面某些 Debian 安装与其他 Debian 安装和 Ubuntu 之间存在差异?其他系统的行为如何?谁是对的,谁应该报告错误?
(请注意,我特别询问字符范围的行为,例如[a-z]
在en_US
语言环境中,主要是在基于 GNU libc 的系统上。我不是在询问如何匹配小写字母或 ASCII 小写字母。)
在两台 Debian 机器上,一台B
在[a-z]
,一台不在,输出LC_COLLATE=en_US …
我想用英语与德语区域设置。
现在我的系统运行以下设置(在 Debian Expert 安装程序的安装过程中配置):
English - English (Default)
other -> Europe -> Austria
United States - en_US.UTF-8
German
我现在的问题是:
如何保留英语语言但将当前语言环境 ( United States - en_US.UTF-8
)切换为所需的德语语言环境 ( de_DE.UTF-8
)?
在安装过程中这是不可能的,因为发生了错误(“检测到无效的语言/区域设置组合”)。
通常,bash globbing 区分大小写:
$ echo c*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo C*
CarePackage.md ChocRippleCake.md Clips
Run Code Online (Sandbox Code Playgroud)
使用方括号似乎不会改变这一点:
$ echo [c]*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo [C]*
CarePackage.md ChocRippleCake.md Clips
Run Code Online (Sandbox Code Playgroud)
如果使用连字符,它仍然不会改变它:
$ echo [c-c]*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo [C-C]*
CarePackage.md ChocRippleCake.md Clips
Run Code Online (Sandbox Code Playgroud)
但是字母是穿插的:
$ echo [B-C]*
CarePackage.md casefix.pike cdless chalices.py charconv.py chocolate.pike ChocRippleCake.md circum.py clip.pike Clips cpustats.pike crop.pike cwk2txt.py
$ …
Run Code Online (Sandbox Code Playgroud) 今天出于某种原因,每次我在终端中点击 tab 时,都会出现:
cat bash: warning: setlocale: LC_CTYPE: cannot change locale (en_CA)
Display all 150 possibilities? (y or n)
Run Code Online (Sandbox Code Playgroud)
当我输入cat
然后点击 TAB时,会发生这种特殊情况。我从来没有改变任何设置或任何东西。有谁知道这是怎么回事?
我正在vnstat
与conky
. 显示我混合的每月流量vnstat
并grep
找到月份。收集数据的命令是
${execi 3600 vnstat -m -i wlan0 | grep "$(date "+%h")" | awk '{print $3 $4}'}
Run Code Online (Sandbox Code Playgroud)
但问题是vnstat
用英语返回月份(Dec 表示十二月)并date
用葡萄牙语返回它(Dez 表示 Dezembro)。
所以我的命令不适用于每月的流量。有什么帮助吗?