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] |