заменить пробел символом подчеркивания в сценарии ожидания

Для удобочитаемости я бы сделал так:

messages=(
    "first"
    "second"
   ...
)
curl_opts=(
    -X POST
    -H 'Content-type: application/json'
)
data_tmpl='{"text":"<!channel>  %s "}' 
url=https://hooks.slack.com/services/...

for msg in "${messages[@]}"; do
    curl "${curl_opts[@]}" --data "$(printf "$data_tmpl" "$msg")" "$url" 
done
1
01.11.2020, 16:00
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, соединились с_:

set cmd "abc def ghi lkj"
set log [join [lrange $cmd 2 end] _]
puts $log
2
18.03.2021, 22:53

Теги

Похожие вопросы