Команда tcl Uplevel set завершается неудачно, когда значение содержит несколько слов

Все, что я пытаюсь сделать: Proc A вызывает Proc B, Используя команду верхнего уровня из B, я пытаюсь установить переменную в области действия proc A. Ошибка возникает, когда значение имеет пробелы.

proc B { } {
    set string1 "Test"
    set string2 "Test with space"
    uplevel 1 set key1 $string1
    uplevel 1 set key2 $string2
    return 0
}

proc A { } {
    set res [B]
    puts "key1 is $key1"
    puts "key2 is $key2"
}

Если я закомментирую key2, он будет работать нормально. При добавлении ключа 2 происходит сбой со следующей ошибкой.

wrong # args: should be "set varName ?newValue?"
    while executing
"set key2 Test with space"

Любые предложения о том, как преодолеть эту ошибку. Ценю твою помощь.

1 ответ

uplevel 1 set key2 $string2 становится set key1 test with spaceВот почему вы получаете свою ошибку.

Лучше всего создать команду, которую вы хотите запустить, используя [list]:

uplevel 1 [list set key2 $string2]

Это будет гарантировать правильное формирование set заявление.

Другие вопросы по тегам