0

[いくつかの数字] の例を含む変数があります。

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

私がそうすると$parse_var、スクリプトが壊れるために置き[1]ます。

"1" の実行中に無効なコマンド名 "1"

このトークンを処理するにはどうすればよいですかparse_var。puts ステートメントの後に分割する必要があります

4

2 に答える 2

4

そのエラーは では発生しません。putsで発生しますset[1]二重引用符で囲まれた文字列は補間を実行するため、すぐに実行しようとしています。

文字列内で中括弧のバランスが取れている場合は、引用符を中括弧に置き換えるだけで済みますが、残念ながら の後に右中括弧のバランスが取れていませんFastEther0/1。代わりに、次のように[s を aで単純にエスケープすることもできます。\

set parse_var "Interface {} {} \[1] \[]
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {}
unassigned {} {} {} {} {} YES unset {} administratively down down"
于 2013-03-29T21:22:49.617 に答える
1

角括弧は Tcl では特別な意味を持ちます: コマンドを呼び出します。この場合、コマンド名は1であり、[...] をそのコマンドの出力に置き換えて返します。コマンド置換と呼ばれます。それを回避するには、次のことができます。

  1. 引用符 " ... " の代わりに中括弧 { ... } を使用してください
  2. または、エスケープして、Kevin Ballard's solution を参照してください

中括弧を使用する場合:

set parse_var {Interface {} {} [1] [] 
FastEther0/1} {} {} {} {} {} {} {} {} {} {} {} 
unassigned {} {} {} {} {} YES unset {} administratively down down}
于 2013-03-29T21:33:11.240 に答える