我正在尝试使用以下命令替换主字符串中的特定字符串(hostname
),
set newVar [string map {`hostname` $theHost} 'lsnrctl status listener_`hostname`']
但是,它不是用变量值替换hostname
,而是使用变量标识符替换它,即" $ theHost"。
newVar读起来像这样,
lsnrctl status listener_$theHost
我希望它是这样,
lsnrctl status listener_theHostName
其中" theHostName"是变量" $ theHost"。
的值我怎样才能做到这一点?
答案 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