ZetCode

Tcl 中的基本命令

最后修改于 2023 年 10 月 18 日

在本 Tcl 教程中,我们将介绍一些基本的 Tcl 命令。

涵盖的 Tcl 命令包括 puts, open, gets, flush, incr, info, setunset 命令。

puts 命令

在第一个示例中,我们提到了 puts 命令。puts 命令用于将消息打印到控制台或其他通道,例如文件。该命令具有以下语法

puts ?-nonewline? ?channelId? string

puts 是命令名称。可选参数用问号括起来。
-nonewline 选项抑制换行符。默认情况下,该命令为每条消息添加一个换行符。channelId 必须是打开通道的标识符,例如 Tcl 标准输入通道 stdinopensocket 的调用返回值。如果未指定,则默认为标准输出通道 stdout。最后,string 是要打印的消息。

#!/usr/bin/tclsh

puts "This is Tcl tutorial"
puts stdout "This is Tcl tutorial"

puts 命令将消息打印到控制台。这两个命令调用都执行相同操作。

open 命令

open 命令打开一个文件、一个串行端口或一个命令管道,并返回一个通道标识符。在下面的示例中,我们使用该命令打开一个文件。

#!/usr/bin/tclsh

puts [open messages w] "This is Tcl tutorial"

puts 命令用于写入文件,使用 open 命令打开进行写入。

$ cat messages 
This is Tcl tutorial

我们展示了由上述 Tcl 脚本创建的消息文件的内容。

gets 和 flush 命令

gets 命令从通道读取一行,flush 命令刷新通道的缓冲输出。在下面的示例中,我们创建一个脚本来问候用户。

#!/usr/bin/tclsh

puts -nonewline "What is your name? "
flush stdout
gets stdin name
puts "Hello $name"

在此示例中,我们请求用户的输入并在自定义问候语中打印该输入。

puts -nonewline "What is your name? "

-nonewline 选项抑制换行符。提示保留在同一行上。

flush stdout

输出被缓冲。要在命令运行后立即查看输出,我们可以使用 flush 命令。stdout 是标准输出。在我们的例子中,它是一个终端;在 Tcl 中称为通道 ID。

gets stdin name

gets 命令从标准输入读取一行。结果存储在 name 变量中。

puts "Hello $name"

最后,我们问候用户。

$ ./name.tcl 
What is your name? Jan
Hello Jan

运行示例。

incr 命令

incr 递增变量的值。它具有以下语法

incr varName ?increment?

如果将参数传递给命令,则将其值添加到变量的值中;否则,该值将递增 1。

#!/usr/bin/tclsh

# incr_cmd.tcl

set x 5

incr x  
puts $x

incr x 4
puts $x

代码示例设置一个变量并将其递增两次。

set x 5

值 5 被设置为 x 变量。

incr x  
puts $x

x 变量递增 1。数字 6 打印到控制台。

incr x 4
puts $x

数字 4 被添加到 x 变量。puts 命令将 10 打印到控制台。

$ ./incr_cmd.tcl 
6
10

info 命令

info 命令返回有关 Tcl 解释器状态的信息。

#!/usr/bin/tclsh

puts [info tclversion]
puts [info host]
puts [info exists var]

info 命令有几个选项。我们展示了其中的三个。

puts [info tclversion]

在这里,我们打印 Tcl 解释器的版本。

puts [info host]

这行打印主机名。

puts [info exists var]

最后,我们检查是否设置了变量 var。

set 和 unset 命令

set 命令用于创建和读取变量。unset 命令销毁一个变量。

#!/usr/bin/tclsh

set x 23
puts $x
puts [set x]

unset x
puts [info exists x]

一个示例,展示了 setunset 命令。

set x 23

我们创建一个 x 变量并为其分配一个值 23。

puts $x

我们打印 x 变量的值。

puts [set x]

这行也打印 x 变量的值。带有单个参数的 set 命令读取变量的值。该值传递给 puts 命令并打印到终端。

unset x

变量 x 被销毁。

puts [info exists x]

我们使用 info exists 命令验证变量是否存在。

命令行参数

Tcl 脚本与其他脚本一样,可以接受命令行参数。Tcl 有三个预定义的变量。

#!/usr/bin/tclsh

puts "The script has $argc arguments"
puts "The list of arguments: $argv"
puts "The name of the script is $argv0"

我们在本脚本中使用所有预定义的变量。

$ ./args.tcl 1 2 3 
The script has 3 arguments
The list of arguments: 1 2 3
The name of the script is ./args.tcl

运行示例。

本章涵盖了 Tcl 语言的一些基础知识。