tclsh 使用笔记

在脚本中调用Linux 命令可以极大提高脚本效率,常用的两个cshell 命令是grep和sed。

  1. grep用于查找文本中匹配的内容,其中几个开关会经常用到:
    -c 输出匹配的数量;
    -r 递归查找;
    -w 全词匹配;
    -m [num] 匹配数量达到num后停止匹配;
    在tclsh中可以用exec 调用。
    set pattern ‘mypattern’
    例如:set aaa [exec grep -w “$pattern” file.txt]
    重点来了,当file.txt中没有pattern时,也就是匹配失败时,这本来很正常,但脚本会报错退出,脚本也就无法执行下去;
    此时可以用catch先忽略这个错误,让脚本往下执行:
    set aaa [catch {exec grep -w “$pattern” file.txt}]
    需要注意的是,在这个命令内,各种转义需要再加两个反斜杠\才能正确转义:例如空格\s*
    set aaa [catch {exec grep -w “\\\s*$pattern” file.txt}]
    另外,还可以将grep 命令设置成一个变量,然后再用exec执行:
    set cmd “grep -w “\\\s*$pattern” file.txt”
    set aaa [catch {$cmd}]
  2. namespace与upvar
    upvar可以使proc中的变量在上一层使用,例如proc里面定义了一个数组,我们想要在外面使用这个数组,这时候return是不管用的,必须要用到upvar,结合namespace使用。
namespace eval parser {
      namespace export parser_drv
      proc parser_drv {view} {
       upvar 1 var var_ori
       set  var_ori($view,max_tran)  1
      }
}

其中upvar 1 var var_ori表示var_ori在上一层用var表示即可。
直接调用$var(ssg,max_tran)即可。
3. format
format与puts结合使用,用在需要格式化输出的场景:
puts $fid [format “my name is %s, my score is %5.3f” $name $score]
其中%5.3f代表输出是保留3位小数点的浮点数,并右移5个空格。
4. string repeat {string} num
用在需要动态调整字符个数的场景。例如,用puts输出时在a和b之间插入5个空格:
puts “a[string repeat { } 5]b”
或者给某个变量的值插入若干个字符:
set result “a[string repeat { } 20]b”
以上两个例子中,这个命令作用不大,可直接敲入所需字符。
重要的是在定义proc时,可以直接通过控制num来实现动态调整:
proc hello {num} {
set result “[string repeat { } $num] -----hello!”
return $result
}
即可通过控制num来调整空格的数量。

5. array数组
tclsh的数组的索引不限定于数字,可以时任意字符(类似于哈希/字典),需要注意的是,在创建array的时候最好先unset一下,
即array unset arrvar *,否则使用的时候会有一些莫名其妙的现象。
array names arrvar 会输出数组索引/元素,$arrvar($elem) 即元素/索引对应的值;

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值