2013-03-29 94 views
0

我有一個包含一個變量[一些數字] 例如:TCL包含字符串[數字]

set parse_var "Interface {} {} [1] [] 
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
unassigned {} {} {} {} {} YES unset {} administratively down down" 

當我放$parse_var腳本打破,因爲[1]

無效的命令名稱爲「1」 在執行 「1」

如何處理這個道理,我需要後看跌語句,分割parse_var

+0

集parse_var「接口{} {} [1] – user2225716

+0

是否真的有後'FastEther0/1'呸...... –

回答

4

不會發生錯誤在puts上,它發生在set上。雙引號字符串執行插值,所以它試圖立即運行[1]

如果您的字符串中的大括號是平衡的,您可以用大括號替換引號,但不幸的是,在FastEther0/1之後會出現不平衡的大括號。因此,相反,你可能想簡單地用\逃脫[ S,就像這樣:

set parse_var "Interface {} {} \[1] \[] 
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
unassigned {} {} {} {} {} YES unset {} administratively down down" 
+0

爲集parse_var不平衡括號? 「[1]」 雖然現在大括號。是平衡的我在執行「1」時得到了同樣的錯誤無效命令名「1」 – user2225716

+0

我知道你們在說什麼。非常感謝 – user2225716

+0

@ user2225716:{是一個大括號。 [是一個括號。 –

1

的方括號具有特殊含義的Tcl:它調用命令,在這種情況下,命令名稱爲1,並且返回將該命令的輸出替換爲該命令的輸出。它被稱爲命令替換。爲了避免這種情況,您可以:

  1. 使用大括號{...}代替引號「......」
  2. 或者逃跑,看到凱文·巴拉德的解決方案

如果你想使用括號:

set parse_var {Interface {} {} [1] [] 
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
unassigned {} {} {} {} {} YES unset {} administratively down down} 
+0

你試過這個嗎?字符串中的括號不匹配。值得注意的是。 'FastEther0/1}'沒有大括號。這就是我提出逃避解決方案的原因。 –

+0

這是因爲user2225716在* FastEther0/1 *之後有一個不匹配的大括號。垃圾進垃圾出。 –

+0

誰說這是垃圾?也許它應該看起來像那樣。 –