这句话对expect或bash意味着什么?

这句话对expect或bash意味着什么?,bash,expect,Bash,Expect,第219页: #!/bin/bash set kludge { ${1+"$@"} shift shift exec expect -f $0 ${1+"$@"} } # rest of script follows 我能够在这个bash解释器中执行我的expect脚本,即使我可以 传递命令行参数,如: /scriptname arg1 arg2 arg3等等 但是当我试着 sh-x./scriptname arg1 arg2 arg3它抛出了一些错误。 请澄清上面的陈述,将expect脚本放

第219页:

#!/bin/bash
set kludge { ${1+"$@"}
shift
shift
exec expect -f $0 ${1+"$@"}
}
# rest of script follows
我能够在这个bash解释器中执行我的expect脚本,即使我可以 传递命令行参数,如:
/scriptname arg1 arg2 arg3
等等 但是当我试着
sh-x./scriptname arg1 arg2 arg3
它抛出了一些错误。
请澄清上面的陈述,将expect脚本放在bash中真的有帮助吗?

从expect开始看,它非常简单。当给定2个参数时,该命令将设置变量的值。这里,变量名是
kludge
,值是
{brates}
之间的多行字符串。注意,在Tcl(和Expect)中,大括号抑制扩展(变量替换、命令扩展等),就像单引号在shell中起作用一样。假设从未使用变量
kludge
,这是一个完全无害的语句

有点棘手。此上下文中的shell命令将设置位置参数。在此命令之后:

$1 = "kludge"
$2 = "{"
$3, $4, ... <= will be the original command line parameters
或者,如果在外壳部分发生了更多的事情,请使用以下命令:

#!/bin/bash
do whatever shell initialization required
expect -c << 'END_OF_EXPECT'
# rest of expect script follows
# ...
END_OF_EXPECT
#/bin/bash
执行shell初始化所需的任何操作

expect-c从expect开始看,它非常简单。当给定2个参数时,该命令将设置变量的值。这里,变量名是
kludge
,值是
{brates}
之间的多行字符串。注意,在Tcl(和Expect)中,大括号抑制扩展(变量替换、命令扩展等),就像单引号在shell中起作用一样。假设从未使用变量
kludge
,这是一个完全无害的语句

有点棘手。此上下文中的shell命令将设置位置参数。在此命令之后:

$1 = "kludge"
$2 = "{"
$3, $4, ... <= will be the original command line parameters
或者,如果在外壳部分发生了更多的事情,请使用以下命令:

#!/bin/bash
do whatever shell initialization required
expect -c << 'END_OF_EXPECT'
# rest of expect script follows
# ...
END_OF_EXPECT
#/bin/bash
执行shell初始化所需的任何操作

expect-c感谢@glenn给出了清晰的答案您提到的第二种方法很好,但是考虑到它与bash-schell脚本参数不冲突,我可以将位置参数传递给expect脚本吗。。。我的意思是我可以做一些像expect-c参数1参数2感谢@glenn给出的明确答案你提到的secoand方法很好,但是考虑到它与bash schell脚本参数不冲突,我可以在这种情况下将位置参数传递给expect脚本吗。。。我的意思是我能做一些像expect-c参数1参数2这样的事情吗