0

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

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

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

newVar 是这样写的,

lsnrctl status listener_$theHost

我要变成这样

lsnrctl status listener_theHostName

其中“theHostName”是变量“$theHost”的值。

我怎样才能做到这一点?

4

2 回答 2

4

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

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

或者你可以使用

set newVar "lsnrctl status listener_${theHost}"

'在 Tcl 中没有特殊含义,因此您的代码段将引发错误。"如果您想要命令、变量和反斜杠替换,请使用,{如果您不想这样做。(\在行尾之前仍将被替换)。

所以 using{`hostname` $theHost}将被替换为`hostname` $theHost,而不是你想要的东西。因此,如果 $theHost 是一个有效的列表元素(不包含空格等),最好用list,构建一个列表,但如果is的值会失败(将抛出错误)"`hostname` $theHost"$theHostfoo barstring map

于 2013-02-25T11:34:24.733 回答
1

你不能就这样吗

set newVar 'lsnrctl status listener_'
append newVar $theHost
于 2013-02-25T09:32:31.233 回答