command arg1 arg2 arg3 ... |
一行に複数のコマンドを並べる時は、セミコロンで区切ります。
command arg1 arg2 arg3 ... ; command arg1 arg2 arg3 ... |
一行が長くなる時は、行末にバックスラッシュを置くことで継続できます。
command arg1 \ arg2 arg3 ... |
それでは、簡単なサンプルを見てください。
日本語を使う場合は、Tcl8.1以上をお使いください。
=>印行は、コマンドの出力行を意味します。
puts stdout {Hello World} =>Hello World puts stderr {Hello World} =>Hello World puts {Hello World} =>Hello World |
puts stdout "Hello World" =>Hello World puts stderr "Hello World" =>Hello World puts "Hello World" =>Hello World |
set var 123 =>123 set var =>123 set var abc =>abc puts stdout $var =>abc unset var |
expr 1 / 0 =>divide by zero expr 10 + 0x10 + 010 =>34 expr 2.0 * asin(1.0) =>3.14159265359 set i 1 =>1 incr i =>2 |
set pi [expr 2.0 * asin(1.0)] =>3.14159265359 set pi =>3.14159265359 |
set var 123 =>123 puts "result = $var" =>result = 123 puts {result = $var} =>result = $var puts "result = \$var" =>result = $var |
set var 123 =>123 puts "result = [pwd]" =>result = C:/ puts {result = [pwd]} =>result = [pwd] puts "result = \[var]" =>result = [pwd] |
scan "123.456" "%d.%d" a b =>2 set a =>123 set b =456 format "%d.%d" $a $b =>123.456 |
# 普通の引数 set foo 3 =>3 proc add {a b} { global foo return [expr $a + $b + $foo] } add 1 2 =>6 |
# 参照型引数とデフォルト付き引数 proc plus {a {b 1}} { upvar $a r set r [expr $r + $b] return $r } set foo 1 =>1 plus foo =>2 plus foo 2 =>4 |
# 可変長引数 proc sum {args} { set s 0 foreach i $args { set s [expr $s + $i] } return $s } sum 1 2 =>3 sum 1 2 3 => 6 |
# コメント1 # コメント2 \ コメント2の続き puts {Hello World} ;#コメント3 =>Hello World |
if, elseif, else文 | ||
---|---|---|
set var 壱 =>壱 if {$var == "壱"} { puts stdout 1 } =>1 |
set var 弐 =>弐 if {$var == "壱"} { puts stdout 1 } else { puts stdout 2 } =>2 |
set var 参 =>参 if {$var == "壱"} { puts stdout 1 } elseif {$var == "弐"} { puts stdout 2 } else { puts stdout 3 } =>3 |
for, foreach, while内ではcontinue, breakコマンドが使えます。
for文 | ||
---|---|---|
for {set i 1} {$i <= 3} {incr i} { puts stdout $i } =>1 =>2 =>3 |
for {set i 1} {$i <= 5} {incr i} { if {$i < 3} { continue } puts stdout $i } =>3 =>4 =>5 |
for {set i 1} {$i <= 5} {incr i} { if {$i > 3} { break } puts stdout $i } =>1 =>2 =>3 |
while文 |
---|
set i 3 =>3 while {$i != 0} { puts stdout $i incr i -1 } =>3 =>2 =>1 |
foreach文 | |
---|---|
foreach i {A B C} { puts stdout $i } =>A =>B =>C |
foreach {i j} {A B C D E F} { puts stdout "$i $j" } => A B => C D => E F |
switch文 | |
---|---|
switch りんご { りんご {puts 100円} みかん {puts 80円} バナナ {puts 30円} default {puts 不明} } =>100円 |
switch りんご { りんご {puts 100円} みかん {puts 80円} バナナ {puts 30円} default {puts 不明} } =>100円 |
afterコマンドは、コマンドの実行時間を遅延させることができます。
afterで指定したコマンドはglobalスコープで実行されることに注意してください。
after文 |
---|
after 1000 ;# 1秒待つ after 1000 "set a 1" ;# 1秒後にコマンドを実行する =>after#0 |
catchコマンドは、エラーをキャッチするのに使います。
エラーが発生した時は、1を返します。それ以外は0を返します。
errorコマンドは、エラーを故意に発生するのに使います。
catch文 |
---|
catch {expr 1+2} var =>0 catch {expr 1*_} var =>1 catch {expr 1/0} var =>1 catch {error bug} var =>1 |
# エラーを返すコマンド(その1) proc foo1 {} { return -code error -errorcode 1 -errorinfo info message } # エラーを返すコマンド(その2) proc foo2 {} { error message info 1 } # エラーを想定した処理(その1) if [catch foo1] { puts "errorCode = $errorCode" puts "errorInfo = $errorInfo" } # エラーを想定した処理(その2) if [catch foo2] { puts "errorCode = $errorCode" puts "errorInfo = $errorInfo" } |
set ary(りんご) 100円 =>100円 set ary(みかん) 80円 =>80円 set ary(バナナ) 30円 =>30円 parray ary =>ary(りんご) = 100円 =>ary(みかん) = 80円 =>ary(バナナ) = 30円 puts $ary(りんご) =>100円 |
array set ary { りんご 100円 みかん 80円 バナナ 30円 } parray ary =>ary(りんご) = 100円 =>ary(みかん) = 80円 =>ary(バナナ) = 30円 puts $ary(りんご) =>100円 |
set list {りんご みかん バナナ} =>りんご みかん バナナ lappend list メロン =>りんご みかん バナナ メロン lindex $list 2 =>バナナ lsort $list =>みかん りんご バナナ メロン |
if ![string compare -nocase "abc" "ABC"] { puts 等しい } =>等しい string toupper "abc" =>ABC string length "xyz" =>3 string length "みかん" =>3 split usr/local/bin / =>usr local bin join {usr local bin} / =>usr/local/bin / set str abc =>abc append str xyz =>abcxyz |
# ASCII to Binary set bin [binary format i 0x12345678] # Binary to ASCII binary scan $bin H2H2H2H2 var1 var2 var3 var4 puts 0x$var4$var3$var2$var1 =>0x12345678 |
set スクリプト名 $argv0 set 引数の数 $argc set 第1引数 [lindex $argv 0] set 第2引数 [lindex $argv 1] set 第3引数 [lindex $argv 2] |