我有目录中所有文件的列表。我将它们存储在一个变量中file_list
。我想获取每个文件的尾名。我的做法是这样的。
set file_list [list /a/b/a.txt /a/b/b.txt /a/b/c/file1.tcl /a/b/c/file2.tcl]
proc file_tail {filename} {
set x {}
set f_tail [file tail $filename]
lappend x $f_tail
return $x
}
foreach ft $file_list {
set f_tail [file_tail $ft]
}
但f_tail
只包含存储的最后一个值,即“file2.tcl”请指导我。我想要文件的所有尾值的列表
如果您要列出所有尾巴,请执行以下操作:
set f_tail {}
foreach ft $file_list {
lappend f_tail [file tail $ft]
}
如果您的辅助函数要执行lappend
,则需要将保存列表的变量保留在过程之外:
proc file_tail {filename listVariable} {
upvar 1 $listVariable theList
set f_tail [file tail $filename]
lappend theList $f_tail
}
set tails {}
foreach ft $file_list {
file_tail $ft tails ; # <<< NAME, so not $tails as that would READ the variable
}
请注意,我们传入变量的名称(tails
外部)并upvar 1
在过程内部使用以创建theList
可更新的链接局部变量(内部)。但是,您不能通过传入列表值来实现;Tcl 对其值使用写时复制语义。您需要注意变量名称与其包含的值之间的区别;他们不一样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句