0

我在使用 tcl 自定义命令时遇到问题(在嵌入了 tcl 的软件包中):

*Custom_Command MyObjectType $ObjectName

问题是,有时对象的名称变量,即 ObjectName 可能会得到一个字符串(包括空格)作为对象的名称;例如,如果它是一个文件名 " My File.txt" 在这种情况下,该命令只会给出一个错误,即不存在具有该名称的对象。

如果我从分配给的值中手动删除空格,ObjectName 则该命令可以正常工作,但是一旦遇到任何带有空格的字符串,脚本就会以错误终止,并抱怨不存在具有此名称的对象。如果我使用命令:puts $ObjectName 结果是:{My File.txt}

请指导我处理此问题的任何方法。

4

2 回答 2

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,则上面将设置$ObjectName为“我的”。

于 2013-09-11T12:50:48.760 回答
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
于 2013-09-12T07:32:53.360 回答