我在使用tcl自定义命令时遇到问题(在软件包中嵌入了tcl):
*Custom_Command MyObjectType $ObjectName
问题是,偶尔,对象的名称变量,即ObjectName可能会得到一个字符串(包括空格)作为对象的名称;例如如果是文件名“My File.txt
”
在这种情况下,命令只会给出一个错误,即不存在具有此类名称的对象。
如果我从分配给ObjectName
的值手动删除空格,那么该命令可以正常工作,但是一旦遇到任何带有空格的字符串,脚本就会以错误终止,抱怨没有具有此名称的对象存在。如果我使用命令puts $ObjectName
,则结果为:{My File.txt}
。
请指导我处理此问题的任何方法。
答案 0 :(得分:1)
你试过引用它吗?
Custom_Command MyObjectType "$ObjectName"
我希望能解决这个问题。如果没有,请告诉我们。
当您打印$ObjectName
并获取{My File.txt}
时,它会告诉我$ObjectName
实际上是一个嵌套列表:{{My File.txt}}
。这意味着沿着这条线,这个变量被引用了两次。你可以回到引用并撤消它,或者解决(不推荐,我更喜欢修复问题而不是解决它):
set ObjectName [lindex $ObjectName 0]; # Work around: Remove the outer list
Custom_Command MyObjectType "$ObjectName"
请注意,如果变量未引用两次,则解决方法将会分崩离析:例如,如果$ObjectName
未引用两次并且值为My File.txt
,则上述内容将设置为{{ 1}}到“我的”。
答案 1 :(得分:0)
您可以在空格处添加跳过字符。
脚本:get.tcl
puts [lindex $argv 0]
puts [lindex $argv 1]
puts [lindex $argv 2]
调用get.tcl
tclsh get.tcl Argument\ 1 Argument\ 2 Argument\ 3
输出:
Argument 1
Argument 2
Argument 3