我为什么选择tcl而不是bash来编写平常的自动化脚本

为了编写一些自动化的脚本我学习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

相关文章
相关标签/搜索