Bash-如何将转义字符打包为字符串中的特殊字符($)?

Bash-如何将转义字符打包为字符串中的特殊字符($)?,bash,sed,Bash,Sed,我在bash中有一个变量,它来自一个函数调用getpassword(),返回“apple$123123” 我想使用FOO变量,它包含$inside并传递到expect程序中 expect -c "\ set timeout 90 set env(TERM) spawn rdesktop 192.168.11.1 expect \"Password:\" send -- \"'${FOO}\n'\" interact " } $FOO包含美元

我在bash中有一个变量,它来自一个函数调用getpassword(),返回“apple$123123”

我想使用FOO变量,它包含$inside并传递到expect程序中

 expect -c "\
    set timeout 90
    set env(TERM)
    spawn rdesktop 192.168.11.1
    expect \"Password:\"
    send -- \"'${FOO}\n'\"
    interact
  "
}
$FOO包含美元符号时出现错误

Password: can't read "123": no such variable
    while executing
我怎样才能解决这类问题?我的想法是,使用sed将转义字符打包到FOO中

谢谢你可以试试这个:

# below is purposely on one line -- it sets the FOO env var
# only for the duration of the expect command.
FOO=$(getpassword) expect -c '
    set timeout 90
    set env(TERM) {are you missing something here?}
    spawn rdesktop 192.168.11.1
    expect "Password:"
    send -- "$env(FOO)\r"    # you send '\r' not '\n'
    interact
'
使用单引号可以更容易地编写(和读取)expect脚本(无需所有反斜杠)。测试:

$ getpassword() { echo 'abc$123'; }
$ FOO=$(getpassword) expect -c 'puts "pw=$env(FOO)"'
pw=abc$123
$ echo "> $FOO <"
>  <
$getpassword(){echo'abc$123';}
$FOO=$(getpassword)expect-c'puts“pw=$env(FOO)”'
pw=abc$123

$echo“>$FOO它是一个变量,还是一个包含该字符串的变量,还是一个包含该字符串的文件,或者…?您知道执行
FOO=“apple$123$“
将把字符串
apple23$
存储到
FOO
中,因为它将尝试解释
$1
,对吗?”?你是说
FOO='apple$123$'
?如果它是一个变量,它已经插值了
$1
。这是无法逆转的。哦……我把问题改了一点。看看你是否知道如何解决。。谢谢
$ getpassword() { echo 'abc$123'; }
$ FOO=$(getpassword) expect -c 'puts "pw=$env(FOO)"'
pw=abc$123
$ echo "> $FOO <"
>  <