Tcl函数args:带空格的字符串

时间:2013-09-11 12:47:45

标签: string tcl

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

*Custom_Command MyObjectType $ObjectName

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

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

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

2 个答案:

答案 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