可移植性真的很重要:on shell and tr

来源:互联网 发布:淘宝货源一般怎么找 编辑:程序博客网 时间:2024/06/01 12:59

道理很简单,但是不小心造成的麻烦会很大!

关键词:shell, tr, regexp, [A-Z] vs. '[A-Z]'

 

1. Make sure where we are.
bash-3.2$ pwd
/home/zedware/test

 

2. What we have
bash-3.2$ ls -al
total 8
drwxr-xr-x  2 zhangw8 zedware   80 Apr  8 22:11 .
drwxr-xr-x 21 zedware zedware 3072 Apr  8 22:11 ..

 

3. Which shell
bash-3.2$ ps -p $$
  PID TTY          TIME CMD
27643 pts/0    00:00:00 bash

 

4. Convert uppercase to lowercase. It works?!
bash-3.2$ echo Bill | tr [A-Z] [a-z]
bill

 

5. Create a file x
bash-3.2$ touch x
bash-3.2$ ls -al
total 8
drwxr-xr-x  2 zedware zedware   80 Apr  8 22:12 .
drwxr-xr-x 21 zedware zedware 3072 Apr  8 22:11 ..
-rw-r--r--  1 zedware zedware    0 Apr  8 22:12 x

 

6. Convert again. It works? NO!
bash-3.2$ echo Bill | tr [A-Z] [a-z]
Bill

 

7. Why?
[A-Z] and [a-z] are interpreted by current shell - bash as regular expression.
Where [a-z] matches x now.

sh-3.2$ echo Bill | tr [A-Z] x
Bill

 

8. Supress the regexp by ''. And it works.
bash-3.2$ echo Bill | tr '[A-Z]' '[a-z]'
bill

 

9. Or use the simpler syntax. It also works.
bash-3.2$ echo Bill | tr A-Z a-z
bill

 

10. Delete file x and try the tests.
bash-3.2$ rm -rf x
bash-3.2$ ls -al
total 8
drwxr-xr-x  2 zedware zedware   80 Apr  8 22:13 .
drwxr-xr-x 21 zedware zedware 3072 Apr  8 22:11 ..

 

11. '' still works.
bash-3.2$ echo Bill | tr '[A-Z]' '[a-z]'
bill

 

12. Also works.
bash-3.2$ echo Bill | tr A-Z a-z
bill

 

13. Now, try it in another shell - csh.
[zedware@fedora ~/test]$ ps -p $$
  PID TTY          TIME CMD
26144 pts/0    00:00:00 csh

 

14. It shows error message. That's better than slient.
[zedware@fedora ~/test]$ echo Bill | tr [A-Z] [a-z]
tr: No match.

 

15. '' still works.
[zedware@fedora ~/test]$ echo Bill | tr '[A-Z]' '[a-z]'
bill

 

16. Also works.
[zedware@fedora ~/test]$ echo Bill | tr A-Z a-z
bill

 

17. Create file x.
[zedware@fedora ~/test]$ touch x

 

18. Error out as expected.
[zedware@fedora ~/test]$ echo Bill | tr [A-Z] [a-z]
tr: missing operand after `x'
Two strings must be given when translating.
Try `tr --help' for more information.

 

19. '' still works.
[zedware@fedora ~/test]$ echo Bill | tr '[A-Z]' '[a-z]'
bill

 

20. Also works.
[zedware@fedora ~/test]$ echo Bill | tr A-Z a-z
bill

 

Conclusion:
1. Be careful of the differences among shells.
2. Always use the standard, portable syntax of shell commands.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 播音主持有纹身怎么办 高考体检补不了怎么办 辅警体检不合格怎么办 小儿听力筛查未过关怎么办 宝宝听力没过关怎么办 护士体检有乙肝怎么办 高考体检表填错怎么办 高考体检表没有下载怎么办 警校视力没过怎么办 凉鞋挂钩总是脱怎么办 特别害怕抛妇产怎么办 抛妇产害怕紧张怎么办 毕业体检有乙肝怎么办? 宝宝胸围偏小怎么办 入园体检不合格怎么办 油表不显示油量怎么办 上大学体检不过怎么办 军校体检没过怎么办 六次化疗后怎么办 宝宝肚子有蛔虫怎么办 肾综激素依赖怎么办 胎儿阴囊有积液怎么办 中考学生英语很差怎么办 中考考得很差怎么办 科学总是考不好怎么办 初三学生数学不好怎么办 初三学生语文不好怎么办 初三学生英语不好怎么办 初三学生学习不好怎么办? 客户说不考虑怎么办 单位体检有乙肝怎么办 厂里体检出乙肝怎么办 厂里体检有乙肝怎么办 厂里体检查出乙肝怎么办 乙肝携带者肝功能异常怎么办 入职体检过不去怎么办 高考体检错过了怎么办 听力体检没过怎么办 身上皮肤太黑怎么办 体检手册没有了怎么办 体检来例假了怎么办