我爲什麼選擇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

相關文章
相關標籤/搜索