#!/usr/bin/expect -f
set cmd "abc def ghi lkj"
set log [ expr echo ${cmd// /_} ]
変数をghi_lkjとして記録したいと思います。
まず、すべてのスペースを下線に置き換えてから、最初の2つの単語を削除しようとしました。
シェルスクリプトではなく、予想されるスクリプトでのみこれを実行したいと思います。
どうすればいいのかご提案ください。よろしくお願いします。
答え1
expect
TCLソルバーと${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_lkj
SPCではありません。_
_
たぶん、最後の2つの単語を次のように関連付けるか、最初の2つの単語を除くすべての単語を次のものにリンクする必要があります_
。
set cmd "abc def ghi lkj"
set log [join [lrange $cmd 2 end] _]
puts $log