Tcl Как передать аргументы процессу - PullRequest
2 голосов
/ 04 августа 2020

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

set result [3RD_par_api {{ifAdminStatus.2 Integer 1}}]
puts $result

Где ifAdminStatus.2 - это OID [объект SNMP Идентификатор] и Целое число - это тип данных, а значение, которое необходимо установить, - 1.

Код работает нормально, но когда я пытаюсь использовать свои переменные скрипта:

set result [3RD_par_api {{$id $data $val}}]
puts $result

Я получаю сообщение об ошибке -

"недопустимая привязка ... $ id $ data $ val"

Как передать определяемые пользователем / переменные в качестве аргументов методу 3RD_par_api и что означает аргумент в двойных фигурных скобках "{{}}"?

1 Ответ

1 голос
/ 04 августа 2020

Давайте посмотрим на различия. С одним набором фигурных скобок Tcl обрабатывает аргумент как одно слово (в некотором роде аналогично одинарным кавычкам в других языках). Но если вы обращаетесь к нему как к списку, он разбивается на несколько частей:

foreach elem {ifAdminStatus.2 Integer 1} {
   puts $elem
}

ifAdminStatus.2
Integer
1

И с двойными фигурными скобками:

foreach elem {{ifAdminStatus.2 Integer 1}} {
   puts $elem
}

ifAdminStatus.2 Integer 1

Теперь список содержит единственный аргумент: "ifAdminStatus .2 Целое число 1 ".

Чтобы создать список, используйте команду list:

# this is the same as {ifAdminStatus.2 Integer 1}
# it contains three strings
set arg [list ifAdminStatus.2 Integer 1]

# this is the same as {{ifAdminStatus.2 Integer 1}}
# it contains a single string
set arg [list {ifAdminStatus.2 Integer 1}]

Очевидно API хочет список с единственной строкой в ​​качестве аргумента. Чтобы создать это с помощью переменных, дважды используйте команду list.

set id ifAdminStatus.2
set data Integer
set val 1
set arg [list [list $id $data $val]]
foreach elem $arg {
   puts $elem
}

ifAdminStatus.2 Integer 1

Вы хотите попробовать:

set result [3RD_par_api [list [list $id $data $val]]]

Или просто:

set result [3RD_par_api [list "$id $data $val"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...