我在 tcl 中有一个字符串说:
set name "a_b_c_d"
我想从中获取 4 个变量,就像$a有值一样,$b值 b 等......
多谢!
这正是split
命令的用途。您只需要提供可选参数,说明使用什么字符将字符串拆分为其字段列表。
set fields [split $name "_"]
请注意,如果一行中有两个拆分字符,则结果中将获得一个空的列表元素。
在我看来,你的要求有点奇怪,但这就是我会做的:
set name a_b_c_d
foreach item [split $name "_"] {
set $item $item
}
您没有要求以下内容,但我相信如果您使用数组可能会更好,这样您就可以确切地知道变量的位置,而不仅仅是在开放中"存在":
set name a_b_c_d
foreach item [split $name "_"] {
set items($item) $item
}
parray items
# items(a) = a
# items(b) = b
# items(c) = c
# items(d) = d
编辑:既然你在评论中提到了它,我就把它放在这里:如果情况如你提到的,我可能会这样:
lassign [split $name "_"] varName folderName dirName
而且它应该在大部分时间仍然有效。不建议使用动态变量名称,并且可以避免 90% 的时间,以获得更安全、更具可读性和可维护性的代码。当然,它适用于你在蓝月亮只需要一次的东西,但你需要知道你在做什么。