如何使语言环境感知大写操作?
标准tr'[:lower:]''[:upper:]'技巧不起作用:
=$ echo żółw | tr "[:lower:]" "[:upper:]"
żółW
(应该是ŻÓWW)
我宁愿避免使用Perl或其他任何重量级的东西。
答案 0 :(得分:2)
如果你的bash足够新,它可以做到(见bash-4.0 NEWS item 1.hh.)。
bash -c 'foo="żółw"; echo ${foo^^}'
zsh(自4.3.3开始?):
zsh -c 'foo="żółw"; echo ${(U)foo}'
答案 1 :(得分:1)
在我看来,如果你想避免重量级人物,你需要自己提供角色,而且,鉴于这是一个真正通用解决方案的不起作用,你将无法使用重量级人物。
一个重量级的解决方案
vinko@parrot:~$ more t.py
# coding: UTF-8
print unicode.upper("żółw".decode('utf-8'))
vinko@parrot:~$ python t.py
ŻÓŁW
需要您指定每个字符的非重量级解决方案
vinko@parrot:~$ echo żół | tr "[żół]" "[ŻÓŁ]"
ŻÓŁ
编辑:基于其他答案和评论,BASH 4.0是区域敏感的并且知道广泛的字符。你必须设置一个合适的语言环境(LC_CTYPE或LC_ALL),以便BASH可以告诉它应该做什么。此外,似乎最近有一些语言环境敏感版本的tr(例如,Mac OSX 10.6)