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

如何在Expect脚本中将含双引号的所有参数读入单个变量?

在Expect脚本中实现类似Shell $@的参数处理

在Expect里,$argv本身就是存储所有命令行参数的列表变量,功能和Shell的$@完全一致,能正确保留包含空格、双引号的参数作为独立元素。你之前的写法里set var $argv其实是正确的,只是可能对列表的使用方式有误解,下面具体说明:

错误写法分析

  • set var $argv[@]:这是Shell专属语法,Expect不支持
  • set var [lindex $argv @]:lindex用于获取列表指定索引的元素,@不是合法索引,因此无效
  • set var $args:$args是Expect中expect命令的匹配模式参数,和脚本的命令行参数无关

正确实现方式

直接将$argv赋值给变量即可,它会完整保留所有参数的结构:

示例脚本

#!/usr/bin/expect
# 将所有命令行参数存入变量
set all_args $argv

# 查看参数列表整体
puts "所有参数:$all_args"
# 查看参数个数
puts "参数总数:[llength $all_args]"
# 遍历每个参数(保留原始格式)
foreach arg $all_args {
    puts "参数内容:'$arg'"
}

测试运行

比如在Shell中执行:

expect test.exp "hello \"world\"" foo "bar baz"

输出会是:

所有参数:{hello "world"} foo {bar baz}
参数总数:3
参数内容:'hello "world"'
参数内容:'foo'
参数内容:'bar baz'

可以看到带双引号、空格的参数都被正确保留为独立元素。

如果需要拼接成Shell风格的参数字符串

如果要把列表转成类似"hello \"world\"" foo "bar baz"这样的字符串,可以用join处理:

set args_str [join $all_args "\" \""]
set args_str "\"$args_str\""
puts "Shell风格参数字符串:$args_str"

运行后会输出:

Shell风格参数字符串:"hello \"world\"" "foo" "bar baz"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:01