为了编写一些自动化的脚本我学习bash好几次,惋惜在须要用到的时候,发现已经忘得差很少了。就一个简单的if else语句,也会由于空格或缩进致使错误,还有复杂的语法规则,替换规则,使人望而却步。git
##TCl的规则github
tcl的规则只有这样两条!简直难以想象,但它真的会工做。每次写tcl脚本的时候,只要在脑子里面过一下这两条规则基本上就不会错了。bash
先介绍一个命令puts,至关于println.学习
puts a"b puts 'abc
字符串不是以引号什么来区分(由于一切都是字符串),双引号的做用是将多个词组织起来,使得在某些场景下看起来是一个单位。vagrant
puts a b #puts看到2个参数的话,会把第一个看成文件句柄,此段代码会出错 puts "a b" #这样对puts来讲就是一个参数
列表什么的也是字符串,在须要看到list的时候,字符串就是list。挺玄妙的吧:)code
string length "a b" #string主命令,length次命令,"a b"是参数,注意这个参数值不包括",它只是起到一个组合的做用。命令的结果是3。 llength "a b" #llength是获取列表长度的命令,它但愿看到的是list,那么参数就是list。结果是2 llindex "a b" 0 #结果是a
没有关键字,都是命令开发
if 1 { puts hello }
if仅仅是一个命令,和puts同样,没有特殊性。{}不是代码块的分隔符!,在tcl里面{}和""的做用类似,起到组合做用,只是""里面的变量会替换,{}不做替换。字符串
数字也是字符串,只是须要看到数字的时候就是数字而已。部署
expr 1 + "2" #注意双引号不属于值,因此2 == "2" == {2}
以上列举的内容,从其它语言使用者角度来看是比较奇特的。有空仔细琢磨tcl的这两个规则,一旦贯通,编写tcl脚本就很顺手了。get
如下网址是我最近用tcl脚本编写的一些用在vagrant provision的脚本,用来简化开发环境的部署。 https://github.com/jianglibo/cld