Expectスクリプトでスペースを下線に置き換えます。

Expectスクリプトでスペースを下線に置き換えます。
#!/usr/bin/expect -f
set cmd "abc def ghi lkj"
set log [ expr echo ${cmd// /_} ]

変数をghi_lkjとして記録したいと思います。

まず、すべてのスペースを下線に置き換えてから、最初の2つの単語を削除しようとしました。

シェルスクリプトではなく、予想されるスクリプトでのみこれを実行したいと思います。

どうすればいいのかご提案ください。よろしくお願いします。

答え1

expectTCLソルバーと${cmd// /_}Kornシェルパラメーター拡張演算子。 TCLはkshや関連シェルではありません。

マニュアルページを読んだ後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_lkjSPCではありません。_

_たぶん、最後の2つの単語を次のように関連付けるか、最初の2つの単語を除くすべての単語を次のものにリンクする必要があります_

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

関連情報