In your case, you will be tempted to use lrange to create a copy of the list you are viewing without items that you do not want to return.
lsearch [lrange $theList $start $end] $searchTerm
The real purpose of the -start option is to allow skipping previously found matches, and is now less useful when we have the -all option (which makes lsearch return a list of all places where it can match the search query). It was used something like this:
for {set idx -1} {[set idx [lsearch -start [incr idx] $list $term]] >= 0} {} {
And now you should write:
foreach idx [lsearch -all $list $term] { puts "found $term at $idx" }
source share