关于Bash
今天培训Bash脚本,一顿口若悬河苦口婆心噼里啪啦之后摆弄
svn,sourceforge 已经从CVS迁移到了svn,吾也乐得与时俱进顺便看
看psvn.el怎么使用。
假惺惺地去问两个伙子有什么不懂的地方,一个伙子老实地摇摇头,
还一个伙子无辜地举了举手,于是我心情愉快地准备show一把。问题
产生于下面一段脚本:
case $1 in
[a-z]) echo "Lowercase letter.";;
[A-Z]) echo "Uppercase letter.";;
[0-9]) echo "Digits";;
*) echo "Punctuation, whitespace, or other.";;
esac
伙子仔细地把代码敲进计算机后发现只有输入`Z'时屏幕才显示
"Uppercase letter",至于其它字母,则都显示"Lowercase
letter",一头舞水。吾也百思不得其解,折腾了一把后悻悻而回,自
己的Ubuntu Edgy上也是这样。于是,只有google之,得到答
案:\textbf{locale的原因}。有些locale中`Z'在`A'之前,于是
[A-Z]就不是一个合法的正则表达式。
% LANG="" sh foo.sh B
果然OK了,《高级Bash脚本编程指南》中指处,用模式[[:lower:]]替
换[a-z],而[[:upper:]]替换[A-Z],POSIX风格更具有可移植性
标签: linux