【发布时间】:2014-01-19 02:28:56
【问题描述】:
#!/bin/sh
# This is a trial program
puts "++++++++++++++++++++++++++++++++++++++++++++++++++"
set y "0.0.0.0"
set z [split $y "."]
puts "z=$z"
lreplace $z 0 5
puts "z $z"
set v [llength $z]
puts "length of array= $v"
puts "in the loop-------->\n"
puts " "
incr v -1
puts $v
for {set ml $v } { $ml >= 0} { puts "$ml =ml"} {
for { set nl [lindex $z $ml]} { $nl >=4} { puts "$nl=nl"} {
puts $nl
after 2000
lset z $ml $nl
incr $nl
}
after 2000
incr ml -1
}
我无法进入第二个 for 循环,这是格式问题吗? 给了我一些奇怪的错误。我添加了 sleep 只是为了检查发生了什么,所以忽略它。
【问题讨论】:
-
你有什么理由使用
lreplace $z 0 5? -
+1 Jerry 的评论:
lreplace $z 0 5在这个程序中实际上并没有做任何事情。该命令基于 z 中的元素创建一个结果列表,其中删除了(不存在的)索引 5 之前的所有元素,然后您不要在任何地方分配此结果列表。 -
如果您打算用 5:s 替换 0:s,这会更好:
set z [lmap elem $z { expr { $elem == 0 ? 5 : $elem } }] -
应该是
incr nl而不是incr $nl