期望在 bash 上下文中设置变量

expect set variable in bash context

您知道是否可以在封装在 bash 脚本中的 expect 脚本中分配和打印 expect 变量。好的,我知道这不是很清楚,让我们看下面的例子:

#!/bin/bash

..some bash code..

/usr/bin/expect << EOF
  set hello "abcd"
  puts "$hello"
  exit
EOF

正常情况下,它应该打印出 "abcd",因为这是变量 "hello" 的内容,但它什么也没打印出来.. 只是空白 "\n" space

lionel@pc:~$ ./call_to_bash_script.sh

lionel@pc:~$

Expect 运行良好,就像我尝试做的那样:puts "abcd" 它打印出来。

lionel@pc:~$ ./call_to_bash_script.sh
abcd  
lionel@pc:~$

Heredocs 展开 bash 变量引用。 Bash 在 expect 有机会看到它之前正在扩展 $hello。您可以通过引用 EOF 分隔符来禁用变量扩展,如下所示:

/usr/bin/expect << 'EOF'
  set hello "abcd"
  puts "$hello"
  exit
EOF

或者通过转义变量引用:

/usr/bin/expect << EOF
  set hello "abcd"
  puts "$hello"
  exit
EOF