2012-09-04 8 views
2

하나의 멤버가 포함 된 목록이 있습니다. 해당 멤버는 <cmd_stichstudy1>XXDDR0_MA[12]입니다. 목록에서 해당 문자열을 검색 할 때 (lsearch 사용) 목록에 포함되어 있지 않습니다. 목록의 구성원을 검색하면 알 수 있습니다.목록에 Tcl의 자체 구성원이 포함되어 있지 않습니다.

tcl> set nets_names 

{<cmd_stichstudy1>XXDDR0_MA[12]} 

tcl> lsearch $nets_names [lindex $nets_names 0] 

-1 

왜 이런 일이 발생합니까?

+2

검색 문자열에 대괄호가 포함되어 있기 때문에 'lsearch'가' XXDDR0_MA1' 또는' XXDDR0_MA2'와 일치하려고합니다. ['string match' man page] (http://tcl.tk/man/tcl8.5/TclCmd/string.htm#M40) –

답변

4

-exact을 사용하면 원하는 방식으로 작동합니다.

% set nets_names {<cmd_stichstudy1>XXDDR0_MA[12]} 
<cmd_stichstudy1>XXDDR0_MA[12] 
% lsearch -exact $nets_names [lindex $nets_names 0] 
0 
% 
2

lsearch은 기본적으로 glob-style matching를 사용하는 불행한 속성이 있습니다. 모든 일치하는 스타일 옵션이 생략

경우, 기본 일치하는 스타일이 -glob은 다음과 같습니다

은 설명서를 인용합니다. 당신이 정말로 -glob을 원하지 않는

그래서 항상 lsearch-exact를 전달합니다.

관련 문제