在expect脚本中用下划线替换空格

在expect脚本中用下划线替换空格
#!/usr/bin/expect -f
set cmd "abc def ghi lkj"
set log [ expr echo ${cmd// /_} ]

我想将变量记录为 ghi_lkj

首先我试图用下划线替换所有空格,然后删除前两个单词。

我只想在expect 脚本而不是shell 脚本中执行此操作。

请建议怎么做。提前致谢。

答案1

expect是一个TCL解释器,${cmd// /_}是一个Korn shell参数扩展运算符。 TCL 不是 ksh,也不是任何相关的 shell。

阅读expect手册页后,下一步应该是研究 TCL 文档。参见例如https://tcl.tk/doc/不过,您也可以在系统上安装适用于您的 TCL 版本的手册页(您可能需要安装软件包tcl-doc)。

这里要做字符替换,可以使用TCL的string map例子:

set cmd "abc def ghi lkj"
set log [string map {" " _} $cmd]
puts $log

或者将其视为$cmd一个列表并加入_

set cmd "abc def ghi lkj"
set log [join $cmd _]
puts $log

哪个会输出abc_def_ghi_lkj.

如果您愿意ghi_lkj,那么,这不仅仅是_您想做的 SPC。

可能您希望最后两个单词与_或除前两个单词外的所有单词与 相连_

set cmd "abc def ghi lkj"
set log [join [lrange $cmd 2 end] _]
puts $log

相关内容