Не использовать gsub()
, а использовать свой шаблон в качестве разделителя полей для FS и OFS, затем распечатать все поля, кроме двух последних, с сохранением OFS; затем напечатайте предпоследнее поле, за которым следует «REPLACEMENT -STRING» , а затем последнее поле.
awk 'BEGIN{ FS=OFS="pat" }
NF>1{ for(i=1; i<NF-1; i++) printf "%s", $i OFS;
printf "%s\n", $i "REPLACEMENT-STRING" $NF; next
}1' infile
Пример ввода:
pat 1 pat2 patt 3 pat 4
pat
patt pat
pa t
Выход:
pat 1 pat2 patt 3 REPLACEMENT-STRING 4
REPLACEMENT-STRING
patt REPLACEMENT-STRING
pa t
Проблема не в объявлении массива, а в способе доступа к элементам. См. Этот пост
Итак, цитируя оригинальный ответ SO:
for ((i = 0; i < ${#message[@]}; i++))
do
echo "${message[$i]}"
done
На моей стороне работает нормально
(Предложение Панки верное, убрать обратные кавычки вокруг аргументов seq. Вместо этого вы можете использовать $(seq 0 2)
. Однако это не решает проблему )
Для удобочитаемости я бы сделал так:
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