开发者社区 问答 正文

shell嵌套expect中puts报错 ?报错

在shell脚本中嵌套了expect
然后定义一个变量,打印出来就报错。
具体如下:
代码:图片说明
结果:图片说明

展开
收起
爱吃鱼的程序员 2020-06-23 21:17:30 783 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    示例的脚本里,实际上bash在调用时,会把$j和$i都展开了,所以实际上puts$j会被展开成puts1,puts$i会被展开成puts($i是空的)。
    并不是表面上看到的$j变量传入给了expect。

    而对于bash来说,如果要在Bash的Here-Documents里不展开变量,可以采用类似如下方法:
    #!/bin/bash

    /usr/bin/expect<<\EOF
    seti1
    puts"iis$i"
    EOF

    可以注意到这段代码把puts$j去掉了(因为加入的话,j在expect里是未定义的,因此会报错)。

    可以参考:
    [1]What'sthedifferencebetween<<EOFand<<\EOFheredocsinshell:https://stackoverflow.com/questions/31679384/whats-the-difference-between-eof-and-eof-heredocs-in-shell
    [2]bashEOF的几种用法:http://blog.csdn.net/eyf0917/article/details/38399335
    [3]BashReferenceManual,3.6.6HereDocuments:https://www.gnu.org/software/bash/manual/bash.html#Here-Documents

    2020-06-23 21:17:48
    赞同 展开评论
问答分类:
问答地址: