Tcl:x27中的特殊字符;执行官';命令

Tcl:x27中的特殊字符;执行官';命令,tcl,Tcl,下面是一个Imagemagick命令,用于从image foo.tiff检索像素值: convert foo.tiff [1x1+40+30] -format %[fx:int(65535*r)],%[fx:int(65535*g)],%[fx:int(65535*b)] info:- 我如何格式化它以使其为Tcl'exec'命令所接受?我尝试了各种各样的转义字符,用大括号括起来,等等。非常感谢您的建议……如果您将该字符串拆分为一个列表,Tcl将做正确的事情: set cmd {convert

下面是一个Imagemagick命令,用于从image foo.tiff检索像素值:

convert foo.tiff [1x1+40+30] -format %[fx:int(65535*r)],%[fx:int(65535*g)],%[fx:int(65535*b)] info:-

我如何格式化它以使其为Tcl'exec'命令所接受?我尝试了各种各样的转义字符,用大括号括起来,等等。非常感谢您的建议……

如果您将该字符串拆分为一个列表,Tcl将做正确的事情:

set cmd {convert foo.tiff [1x1+40+30] -format %[fx:int(65535*r)],%[fx:int(65535*g)],%[fx:int(65535*b)] info:-}
exec {*}[split $cmd]

就个人而言,我只想引用不能用
{}
替换的位:

exec convert foo.tiff {[1x1+40+30]} -format {%[fx:int(65535*r)],%[fx:int(65535*g)],%[fx:int(65535*b)]} info:-

该字符串实际上已经是一个格式良好的列表<代码>执行{*}$cmd将起作用。这很有效!但这{*}是什么?这对我来说是全新的…谢谢你的帮助。这是Tcl为数不多的语法规则之一:它将列表扩展为元素。假设
设置变量[list foo bar baz]
。调用
acommand$var
时,“acommand”只接收一个参数,即列表{foo bar baz}。调用
acommand{*}$var
时,“acommand”接收三个参数,字符串“foo”、“bar”和“baz”。请参阅--在Tcl 8.4及更早版本中,我们不得不求助于
eval
来实现相同的效果。