2015-07-03 2 views
1

Я использую lappend в сценарии, делать что-то вроде этого:lappend добавляет фигурные скобки к элементу

set element_name a[0] 
lappend mylist $element_name 

Я вижу, что если $element_name содержит [] в нем, например, a[0]. lappend добавляет фигурные скобки к нему. Как, если я печатаю $mylist то это дает:

{a[0]} 

Как я могу избавиться от этих фигурных скобок? Я просто хочу a[0].

+0

Это первая линия должна генерировать ошибку, 'имя команды недопустимое 0', если вы не писали как' {a [0]} 'или' "а \ [0 \ ] "' – slebetman

+0

@slebetman: 'a \ [0]' без двойных кавычек. –

+0

Или у вас есть команда: 'proc 0 {} {return {[0]}}' –

ответ

1

Скобки исчезают, если вы используете join, чтобы преобразовать список в строку:

puts [join $mylist] 
# => a[0] 

или если вы печатаете элементы отдельно:

foreach elem $mylist {puts $elem} 

Строковое представление списка необходимо процитировать элементы, которые содержат символы, значимые для интерпретатора и/или вмешивающиеся в структуру списка. Скобки (со сценарием между ними) обычно интерпретируются как подстановка команд, и чтобы интерпретатор не оценивал это, ваши элементы завертываются в фигурные скобки. Когда элементы списка преобразуются в строку, это перестает быть проблемой, и текст, который вы сохранили в них, больше не завершается.

Документация: foreach, join, puts

Смежные вопросы