tclsh 遍历列表_Tcl / Tk 大全

摘要: Tcl/Tk是一种简明,高效,可移植性好的编程语言。在信息产业领域具有广泛的应用。本文描述了TCL/TK成长历史,特点,优势及应用范围,阐述了TCL/TK的总体结构图,比较了TCL/TK与当今流行的C++,Java的性能比较,详细阐述了TCL/TK的语法,并介绍了TK的工具箱.

一.Tcl / Tk简介

.1背景

Tcl/Tk的发明人John Ousterhout教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电路CAD设计中,很多时间是花在编程建立测试环境上。并且,环境一旦发生了变化,就要重新修改代码以适应。这种费力而又低效的方法,迫使Ousterhout教授力图寻找一种新的编程语言,它即要有好的代码可重用性,又要简单易学,这样就促成了Tcl (Tool Command Language)语言的产生。

Tcl最初的构想的是希望把编程按照基于组件的方法(component approach),即与其为单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的,具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的应用程序的需求,其它部分可由这些小的组件功能基础上生成。不同的组件有不同的功能,用于不同的目的。并可为其它的应用程序所利用。当然,这种语言还要有良好的扩展性,以便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘”合在一起,使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种设计思想与后来的Java不谋而合。终于在1988年的春天,这种强大灵活的胶水- Tcl语言被发明出来了。

1.2定义

按照Ousterhout教授的定义,Tcl是一种可嵌入的命令脚本化语言(Command Script Language)。“可嵌入”是指把很多应用有效,无缝地集成在一起。“命令”是指每一条Tcl语句都可以理解成命令加参数的形式:

命令[参数1] [参数2] [参数3] [参数4] ...... [参数N]

脚本化是指Tcl为特殊的,特定的任务所设计。但从现在角度看,可以说Tcl是一种集C语言灵活强大的功能与BASIC语言易学高效的风格于一身的通用程序设计语言。

按照Ousterhout教授的定义,Tcl是一种可嵌入的命令脚本化语言(Command Script Language)。“可嵌入”是指把很多应用有效,无缝地集成在一起。“命令”是指每一条Tcl语句都可以理解成命令加参数的形式:

命令[参数1] [参数2] [参数3] [参数4] ...... [参数N]

脚本化是指Tcl为特殊的,特定的任务所设计。但从现在角度看,可以说Tcl是一种集C语言灵活强大的功能与BASIC语言易学高效的风格于一身的通用程序设计语言。

t c l(读作“t i c k l e”)脚本语言和t k工具箱是为X Wi n d o w系统创建图形用户界面的编程环境。t c l和t k非常容易学习和使用,并且利用它们构造用户界面的速度要比利用传统的X Wi n d o w编程方法快得多。它最初设计用来为交互式工具提供一种可复用的命令语言,但它的实际发展却远非如此,并且在众多的软件产品中被广泛应用。t c l / t k的真正功能在于,利用t c l脚本语言几乎完全可以编写复杂的图形应用程序,因而避开了利用C语言编写界面时所遇到的界面编程的许多复杂性。

t c l / t k的正式We b站点是h t t p : / / w w w. s c r i p t i c s . c o m /。

在这里t c l平台是S c r i t p i c s公司的产品。S c r i t p i c s公司要把t c l脚本语言推广到主流的团体中去。S c r i t p i c s公司提供了开发工具,技术支持和在开发t c l和t k公开代码的软件包是对t c l实行商业支持服务。该站点还具有下载和安装t c l / t k最新版本的连接。目前,可得到的最新t c l / t k的版本是8 .4a。

t c l中的可执行程序t c l,t c l s h,w i s h和t c l h e l p被Red Hat的r p m安装在目录/ u s r / b i n中。可以使用t c l h e l p调出关于t c l和t k的帮助信息。系统中也提供了t c l s h和w i s h的手册页。

二.Tcl / Tk基础

t c l是类似于UNIX shell的一种解释性的语言,这就是说,t c l命令首先被读取,接着就被执行。也是一个用来设置查看的工具箱,它可以利用t c l语法来创建按钮、滚动杆、对话框以及窗口等G U I组件。为了运行t c l。t c l s h和w i s h与s h或c s h这样的标准UNIX shell类似,它们都允许命令被交互地执行或从某个文件中读入。在实际情况中,人们很少交互地使用这些s h e l l,因为它们的交互能力很有限。t c l和w i s h之间的主要差别是:t c l s h只理解t c l命令,而w i s h理解t c l和t k两种命令。

2.1交互方式

本节将简单介绍tcl shell的交互使用方式,从而来说明它的一个问题。要想开始交互使用t c l,只须在UNIX shell的提示符下输入t c l s h(或w i s h),这时将出现如下提示符:

在本章中,交互的命令以百分号( % )开始。在这一提示符后,输入如下命令:

% echo“hello world”

在输入这一命令之后,hello world将会显示在新的提示符之后。接下来执行如下命令:

% puts“hello world”

此时,同样的输出结果将显示出来,不过这两个命令之间具有很大的差别。为了显示字符串“hello world”,第一个命令运行的是e c h o二进制文件,而第二个命令使用的是t c l命令puts(put string)。e c h o形式的”hello world”,仅当交互运行t c l s h时才起作用,这正是交互使用t c l s h和w i s h的问题之一。例如,如果把命令:

echo“hello world”

放入文件h e l l o w o r l d . t c l,然后从t c l s h中执行如下s o u r c e命令:

% source helloworld.tcl

那么将会得到如下的错误信息:

invalid command name“echo”

此行代码将在一个UNIX shell中执行这一具有变化的命令。这只是在tcl shell的交互方式中工作方式不同的事例之一。

2.2非交互方式

在通常情况下,t c l s h和w i s h-般是以非交互的方式来使用的,这就是说,它们在U N I X的提示符( $ )下被调用并执行脚本,例如:

$ tclsh myprog.tcl

$ wish myprog.tcl

或者从一个脚本内来调用它们,这个脚本的第一行通常与如下内容类似:

#!/usr/bin/tclsh

在通常情况下,对脚本的每次安装都必须修改第一行,因为w i s h或t c h s h可能位于不同的位置。为了避免在每次安装时都必须对脚本进行编辑,t c l s h的手册页推荐利用如下三行代码作为所有t c l / t k脚本的头三行:

#!/bin/sh

# the next line restarts using tclsh \

exec wish“$0”“$@”

这意味着,用户只须在自己的路径中具有w i s h就可以使用脚本。利用这种方法产生的各自的结果可能会根据系统上s h版本的不同而不同。

t c l非交互使用方式的实际优点是与UNIX shell的非交互使用方式的优点相同。非交互使用方式允许把多个命令组合在一起,并且只要输入脚本的名字就可以执行脚本中的所有命令,同时这种方式可以加速对大型程序的开发和调试。

四.与其它语言的比较

下面就Tcl与经典的的程序设计语言C++,及现在时髦的Java做一些比较:

C++,Tcl/Tk和Java的性能比较表

运行程序速度

与C++可比

调试难易程度

复杂

每次修改完代码需重新编译

简单

修改完代码可直接运行

比较简单

修改完代码需重新编译成ByteCode,而且编译速度很慢

程序代码复杂程度以上面的grep为例

复杂

50行程序代码

简明

10行程序代码

比较简单

40行程序代码

系统资源占用情况

200MB HD

32MB Memory

3MB HD

4MB Memory

20MB HD

4MB Memory

代码可维护性

可移植性

一般

较好

本节将介绍t c l的语法及其在脚本中的使用方式。下面几小节中的代码既可以交互地运行,也可以从脚本运行。在交互方式下,输出内容之间的间距会略有不同。

TCL命令的基本结构是:

commandname arguments

这里的c o m m a n d n a m e是t c l所要执行的命令,a rg u m e n t s是提供给此命令的可选变元,整个行(c o m m a n d n a m e和a rg u m e n t s)称为一个命令。命令之间通过换行( \ n )或者由分号( ; )来分隔。如果在一行上只有一个命令,那么分号可以省略。作为说明,看下面两个命令:

set foo 0

set bar 1

这两个命令可以写成两行,每行写一个;另外,它们也可以写在同一行上,例如:

set foo 0; set bar 1;

有时需要在表达式中使用另一个表达式的值。使用方括号来实现:

puts [expr 1000/4];

输出将是2 5 0。在需要时方括号也可以嵌套。

除命令外,t c l脚本中另一种类型的代码行是注释。如同在UNIX shell和P e r l中那样,注释行是以#号开头的行,例如:

#this is a comment

但是与s h e l l中不同的是,下面一行内容并不是注释

set foo 0 # initialize foo

而且它将会产生一个错误,这是因为t c l解析器总是认为一条命令应该以换行或分号结束,因此如果想要在命令所在的同一行上包括注释内容,这个命令必须以分号结束,就像下面这样:

set foo 0;#initialize foo

因此,用分号结束所有的命令通常是一种很好的做法,尽管有时分号并不是必需的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值