You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Expect脚本正确接收包含空格的传入变量?

解决Expect脚本接收带空格变量的参数传递问题

这问题我之前踩过坑!核心原因是shell的参数拆分机制——当你直接写$hello的时候,shell会把变量里的空格当成参数分隔符,把"My Life"拆成两个独立参数传给Expect脚本,所以脚本里的first_var拿到的是"My",second_var拿到的是"Life",完全不符合预期。

最简单的解决方案:传递变量时加双引号

你只需要在调用脚本时,把变量用双引号包裹起来,就能让shell完整保留变量里的空格,不会拆分参数:

hello="My Life" world="is wonderful" ./script.sh "$hello" "$world"

这样传参后,Expect脚本里的[lindex $argv 0]就能完整拿到"My Life",[lindex $argv 1]拿到"is wonderful",和你直接执行./script.sh 'My Life' 'is wonderful'的效果完全一致。

为什么双引号能解决问题?

shell在处理不带引号的变量扩展(比如$hello)时,会自动执行两个操作:

  1. 单词拆分(Word Splitting):把变量内容按空格、制表符等空白字符拆分成多个单词
  2. 路径扩展(Pathname Expansion):把包含通配符的内容展开成匹配的文件名

而用双引号包裹变量("$hello")时,shell会抑制这两个操作,完整保留变量的原始内容,包括空格和特殊字符,完美解决参数被拆分的问题。

扩展:如果在shell脚本里调用Expect脚本

要是你把变量定义和调用写在一个shell脚本里,同样要记得给变量加双引号:

#!/bin/bash
hello="My Life"
world="is wonderful"
# 必须用双引号包裹变量
./script.sh "$hello" "$world"

内容的提问来源于stack exchange,提问作者Eddie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:50:45