Передайте переменную в списке и ожидайте ее буквальное значение - PullRequest
0 голосов
/ 29 июня 2019

Я пытался написать простой скрипт, в котором я создаю список из некоторой существующей переменной, и когда я печатаю то же самое, ожидаю его буквальное значение:

set testString "John A. Smith, Mobile:001-445-4567-0987, Pin-556789"
set results  { address contact $testString }
puts $results

Но я получаю следующий вывод:

address contact $testString 

Где я ожидал - как мне достичь того же:

address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789 

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Скобки предотвращают подстановку переменных, поэтому вместо них используйте двойные кавычки:

set results " address contact $testString "
puts $results
#  address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789

Или используйте subst для принудительной замены:

set results { address contact $testString }
set results [subst $results]
puts $results
#  address contact John A. Smith, Mobile:001-445-4567-0987, Pin-556789

Или, если вы действительно хотите иметь список, в котором первый элемент равен address, второй contact, а третий - $testString, то вы можете использовать list кроме того, что вывод будет выглядеть иначе:

set results [list address contact $testString]
puts $results
# address contact {John A. Smith, Mobile:001-445-4567-0987, Pin-556789}

Но таким образом, вы можете получить testString обратно, если сделаете что-то вроде lindex $results 2, тогда как, если бы вы использовали какой-либо из более ранних методов, вы получите только первое слово testString, то есть John.

0 голосов
/ 29 июня 2019

Когда вы делаете:

set results  { address contact $testString }

, вы создаете буквенную строку (без подстановок) и присваиваете ее переменной.Это то, что делает {…};это похоже на 'single quotes' в оболочках Unix, за исключением того, что оно может быть вложенным.

Чтобы получить подстановку, вы должны либо использовать " двойные кавычки ", либо пропустить литеральную строку через substкоманда:

set results " address contact $testString "
set results [subst { address contact $testString }]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...