如何在expect脚本的send命令中发送变量值

如何在expect脚本的send命令中发送变量值

下面是我的脚本

proc sendline {line} { send -- "$line\r" }

set slot 1
set port 1
for {set x 0} {$x<48} {incr x} {
   sendline {curl -X POST -d '{"command":"dumpcommand","slot": "$slot","port": "$port"}' http://127.0.0.1:7777/api/test}

   expect -exact "OK"
   sleep 2
   incr slot
   incr port
}

我希望插槽和端口替换为 1 ,2 ....eg

curl -X POST -d '{"command":"dumpcommand","slot": "1","port": "1"}' http://127.0.0.1:7777/api/test

答案1

Tcl 中的大括号就像 shell 中的单引号:它们防止变量替换:请参阅http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm

你需要

sendline "curl -X POST -d '{\"command\":\"dumpcommand\",\"slot\": \"$slot\",\"port\": \"$port\"}' http://127.0.0.1:7777/api/test"

如果所有转义引号都有问题,请使用formatTcl 的 printf 等效项

sendline [format {curl -X POST -d '{"command":"dumpcommand","slot": "%s","port": "%s"}' http://127.0.0.1:7777/api/test} $slot $port]

相关内容