# Tcl 中的基本命令

> 原文： [https://zetcode.com/lang/tcl/basiccommands/](https://zetcode.com/lang/tcl/basiccommands/)

在 Tcl 教程的这一部分中，我们介绍了一些基本的 Tcl 命令。

涵盖的 Tcl 命令包括`puts`，`open`，`gets`，`flush`，`incr`，`info`，`set`和`unset`命令。

## `puts`命令

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

```tcl
puts ?-nonewline? ?channelId? string

```

`puts`是命令名称。 在问号之间指定了可选参数。
`-nonewline`开关禁止换行符。 默认情况下，该命令在每条消息中放置换行符。 `channelId`必须是开放通道（例如 Tcl 标准输入通道`stdin`）的标识符，该标识符是调用`open`或`socket`的返回值。 如果未指定，则默认为标准输出通道`stdout`。 最后，`string`是要打印的消息。

```tcl
#!/usr/bin/tclsh

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

```

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

## `open`命令

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

```tcl
#!/usr/bin/tclsh

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

```

`puts`命令用于写入文件，该文件通过`open`命令打开以进行写入。

```tcl
$ cat messages 
This is Tcl tutorial

```

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

## `gets`和`flush`命令

`gets`命令从通道读取一条线，`flush`命令刷新通道的缓冲输出。 在下面的示例中，我们创建一个向用户打招呼的脚本。

```tcl
#!/usr/bin/tclsh

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

```

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

```tcl
puts -nonewline "What is your name? "

```

`-nonewline`选项禁止换行。 提示保持在同一行。

```tcl
flush stdout

```

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

```tcl
gets stdin name

```

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

```tcl
puts "Hello $name"

```

最后，我们向用户致意。

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

```

运行示例。

## `incr`命令

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

```tcl
incr varName ?increment?

```

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

```tcl
#!/usr/bin/tclsh

# incr_cmd.tcl

set x 5

incr x  
puts $x

incr x 4
puts $x

```

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

```tcl
set x 5

```

值 5 设置为`x`变量。

```tcl
incr x  
puts $x

```

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

```tcl
incr x 4
puts $x

```

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

```tcl
$ ./incr_cmd.tcl 
6
10

```

这是`incr_cmd.tcl`脚本的输出。

## `info`命令

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

```tcl
#!/usr/bin/tclsh

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

```

`info`命令具有多个选项。 我们展示其中的三个。

```tcl
puts [info tclversion]

```

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

```tcl
puts [info host]

```

该行显示主机名。

```tcl
puts [info exists var]

```

最后，我们检查变量`var`是否设置。

## `set`和`unset`设置命令

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

```tcl
#!/usr/bin/tclsh

set x 23
puts $x
puts [set x]

unset x
puts [info exists x]

```

显示`set`和`unset`命令的示例。

```tcl
set x 23

```

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

```tcl
puts $x

```

我们打印`x`变量的值。

```tcl
puts [set x]

```

此行还打印`x`变量的值。 具有一个参数的`set`命令读取变量的值。 该值将传递到`puts`命令并打印到终端。

```tcl
unset x

```

变量`x`被破坏。

```tcl
puts [info exists x]

```

我们使用`info exists`命令验证变量的存在。

## 命令行参数

像任何其他脚本一样，Tcl 脚本也可以使用命令行参数。 Tcl 具有三个预定义变量。

*   `$argc` - 传递给脚本的参数数量
*   `$argv` - 参数列表
*   `$argv0` - 脚本名称

```tcl
#!/usr/bin/tclsh

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

```

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

```tcl
$ ./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 语言的一些基础知识。