如何在Tcl / Expect中用变量值替换字符串

时间:2013-02-25 09:24:41

标签: unix tcl expect

我正在尝试使用以下命令替换主字符串中的特定字符串(hostname),

set newVar [string map {`hostname` $theHost} 'lsnrctl status listener_`hostname`']

但是,它不是用变量值替换hostname,而是使用变量标识符替换它,即" $ theHost"。

newVar读起来像这样,

lsnrctl status listener_$theHost

我希望它是这样,

lsnrctl status listener_theHostName

其中" theHostName"是变量" $ theHost"。

的值

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

使用list命令构建替换列表:

set newVar [string map [list `hostname` $theHost] "lsnrctl status listener_`hostname`"

或者您可以使用

set newVar "lsnrctl status listener_${theHost}"

'在Tcl中没有特殊含义,因此您的代码段会抛出错误。 如果你想要命令,变量和反斜杠替换",如果你不想要这个,请使用{。 (\在行结束之前仍然会被替换)。

因此,使用{`hostname` $theHost}将替换为`hostname` $theHost,而非您想要的内容。因此,使用list更好地构建列表,如果$ theHost是有效的列表元素(不包含空格等),则"`hostname` $theHost"可能有效,但如果$theHost的值为{,则会失败{1}}(foo bar会抛出错误)

答案 1 :(得分:1)

你不能这样做吗

set newVar 'lsnrctl status listener_'
append newVar $theHost