Для удобочитаемости я бы сделал так:
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
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