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

Lio*_*.24 1 bash shell tcl expect

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

#!/bin/bash

..some bash code..

/usr/bin/expect << EOF
  set hello "abcd"
  puts "$hello"
  exit
EOF
Run Code Online (Sandbox Code Playgroud)

通常,它应该打印出“abcd”,因为这是变量“hello”的内容,但它什么也没打印出来......只是空白“\n”空格

lionel@pc:~$ ./call_to_bash_script.sh

lionel@pc:~$
Run Code Online (Sandbox Code Playgroud)

Expect 工作得很好,就像我尝试做的那样:将“abcd”打印出来。

lionel@pc:~$ ./call_to_bash_script.sh
abcd  
lionel@pc:~$
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 6

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

/usr/bin/expect << 'EOF'
  set hello "abcd"
  puts "$hello"
  exit
EOF
Run Code Online (Sandbox Code Playgroud)

或者通过转义变量引用:

/usr/bin/expect << EOF
  set hello "abcd"
  puts "\$hello"
  exit
EOF
Run Code Online (Sandbox Code Playgroud)