Bashで空白文字列配列を使用する - 「curl:ホストを解決できません」というエラーメッセージ

Bashで空白文字列配列を使用する - 「curl:ホストを解決できません」というエラーメッセージ

サーバーの特定の側面を監視し、問題がある場合は、Slackにメッセージを送信するためにbashにスクリプトを作成しようとしています。しかし、私は私のスクリプトの構文に問題があると信じさせる一連の奇妙なエラーメッセージに遭遇しました。問題のコードは次のとおりです。

message=("Please go to this website: www.google.com" "Please go to this website: www.github.com" "Please go to this website: www.wikipedia.com")

for j in seq `0 2`; do
curl -X POST -H 'Content-type: application/json' --data '{"text":"<!channel>  '${message[$j]}' "}' https://hooks.slack.com/services/AN_ID/ANOTHER_ID/SOME_ID# Slack with channel mention
done

このコードを実行すると、「@channelがウェブサイトにアクセスしてください:www.google.com」など、指定されたテキスト行ごとに指定されたSlackグループにメッセージを送信する必要があります。

このプログラムを実行すると、次のエラーメッセージが表示されます。

curl: (6) Could not resolve host: go
curl: (6) Could not resolve host: to
curl: (6) Could not resolve host: this
curl: (6) Could not resolve host: website:
curl: (3) [globbing] unmatched close brace/bracket in column 34
invalid_payloadcurl: (6) Could not resolve host: go
curl: (6) Could not resolve host: to
curl: (6) Could not resolve host: this
curl: (6) Could not resolve host: website:
curl: (3) [globbing] unmatched close brace/bracket in column 33

これらのエラーメッセージを解決する方法について洞察力を持つ人はいますか?これが文字列配列の作成方法に関連しているようですが、問題が何であるかはわかりません。

ベストアンサー1

問題は配列宣言ではなく、要素にアクセスする方法にあります。バラよりこの投稿

したがって、SOの元の答えを引用すると、次のようになります。

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

私の立場ではうまくいきます。

(Pankiの提案は正しいです。seqパラメータの周りのバックティックを削除してください。代わりに使用できますが、$(seq 0 2)これは問題を解決しません。)

おすすめ記事