Bash-如何将转义字符打包为字符串中的特殊字符($)?
我在bash中有一个变量,它来自一个函数调用getpassword(),返回“apple$123123” 我想使用FOO变量,它包含$inside并传递到expect程序中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包含美元
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 <"
> <