2013-02-25 69 views
0

我試圖替換特定的字符串(hostname),主字符串中,使用下面的命令變量值,如何在Tcl變量值替換字符串/期待

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

然而,代替用變量值代替hostname,它用變量標識符替換它,即「$ theHost」。

的newVar內容是這樣的,

lsnrctl status listener_$theHost 

我希望它是這樣,

lsnrctl status listener_theHostName 

其中 「theHostName」 是變量 「$ theHost」 的價值。

我該如何做到這一點?

回答

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值是foo barstring map將拋出一個錯誤)

+0

太棒了!這對我有用(第一種選擇)。你救了我的命:D – 2013-02-26 06:21:36

1

你就不能這樣做

set newVar 'lsnrctl status listener_' 
append newVar $theHost 
+0

我m計劃將這部分也作爲一個變量:lsnrctl status listener_ ...雖然您的建議似乎非常簡潔,但我不認爲我可以在這種情況下使用它。有什麼建議麼? – 2013-02-25 09:37:01