2006-12-29

关于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风格更具有可移植性

标签:

2 Comments:

At 22:07, Blogger YY© said...

哈哈,show failed...
其中一个伙子还多有测试精神的...

 
At 00:04, Blogger David Lee said...

不算failed吧,呵呵,算delay哈~

 

发表评论

<< Home