Использование массива строк с пробелами в bash - сообщения об ошибках "curl: не удалось разрешить хост"

Не использовать 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
0
07.10.2019, 17:48
2 ответа

Проблема не в объявлении массива, а в способе доступа к элементам. См. Этот пост

Итак, цитируя оригинальный ответ SO:

for ((i = 0; i < ${#message[@]}; i++))
do
    echo "${message[$i]}"
done

На моей стороне работает нормально

(Предложение Панки верное, убрать обратные кавычки вокруг аргументов seq. Вместо этого вы можете использовать $(seq 0 2). Однако это не решает проблему )

.
1
28.04.2021, 23:28

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

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
0
28.04.2021, 23:28

Теги

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