#!/usr/bin/expect -f
set cmd "abc def ghi lkj"
set log [ expr echo ${cmd// /_} ]
변수를 ghi_lkj로 기록하고 싶습니다.
먼저 모든 공백을 밑줄로 바꾼 다음 처음 두 단어를 제거하려고 했습니다.
쉘 스크립트가 아닌 예상 스크립트에서만 이 작업을 수행하고 싶습니다.
어떻게 해야 할지 제안해 주세요. 미리 감사드립니다.
답변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가 아닙니다 ._
_
어쩌면 마지막 두 단어를 다음과 연결하거나 처음 두 단어를 제외한 모든 단어를 다음과 연결하기 를 원할 수도 있습니다 _
.
set cmd "abc def ghi lkj"
set log [join [lrange $cmd 2 end] _]
puts $log