相关疑难解决方法(0)

LC_COLLATE 是否(应该)影响字符范围?

Collat​​ion 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包括排序顺序之间az排序顺序中的所有内容,包括大写字母BZ.

所有测试的系统都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 …

regular-expression locale

27
推荐指数
1
解决办法
1万
查看次数

打印包含单引号和其他特殊字符的字符串

我怎样才能用 AIX 脚本正确地写这个?我的要求是在 test.txt 中写这个命令:

clock=$(prtconf -s | awk '{print $4,$5}')
Run Code Online (Sandbox Code Playgroud)

我试过这个命令:

print 'clock=$(prtconf -s | awk '{print $4,$5}')' > test.txt
Run Code Online (Sandbox Code Playgroud)

写在 test.txt 中的输出给了我:

clock=$(prtconf -s | awk {print ,})
Run Code Online (Sandbox Code Playgroud)

如果我使用" "引号:

print "clock=$(prtconf -s | awk '{print $4,$5}')"
Run Code Online (Sandbox Code Playgroud)

它直接让我:

clock=3612 MHz
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

command-line shell scripting awk quoting

8
推荐指数
2
解决办法
2万
查看次数