複数行のカール実行で複数行変数を連結して使用する

複数行のカール実行で複数行変数を連結して使用する

このコードを使うと

#!/bin/bash
set -x
PROPERTIES="MAINTAINER=Self, My"

while IFS='=' read -r key value
do
  ADDITIONAL_PARAMETERS+="-F variables[${key}]=${value} "
done <<< "${PROPERTIES}"
#ADDITIONAL_PARAMETERS="$(echo -e "${ADDITIONAL_PARAMETERS}" | sed -e 's/[[:space:]]*$//')"

curl -k -X POST -F token=TOKEN -F "ref=master" \
-F "variables[GIT_REF]=GIT_REF" \
-F "variables[GIT_COMMIT]=GIT_COMMIT" \
${ADDITIONAL_PARAMETERS} \
https://gitlab.url.net

不明ないくつかのプロパティをビルドパラメータとしてGitLabパイプラインに渡そうとします。

問題は、引用符が間違った場所に生成され、次の呼び出しとエラーが発生するようです。

+ curl -k -X POST -F token=TOKEN -F ref=master -F 'variables[GIT_REF]=GIT_REF' -F 'variables[GIT_COMMIT]=GIT_COMMIT' -F 'variables[MAINTAINER]=Self,' My https://gitlab.url.net
curl: (6) Couldn't resolve host 'My'
curl: (6) Couldn't resolve host 'gitlab.url.net

一重引用符はどこから来たのですか?変数の途中に2番目の引用があるのはなぜですか?-F 'variables[MAINTAINER]=Self,' My

ベストアンサー1

あなた本物次のタスクを実行するには配列を使用する必要があります。http://mywiki.wooledge.org/BashFAQ/050

#!/bin/bash
properties="MAINTAINER=Self, My"

curl_opts=(
    -k 
    -X POST 
    -F token=TOKEN 
    -F "ref=master" 
    -F "variables[GIT_REF]=GIT_REF" 
    -F "variables[GIT_COMMIT]=GIT_COMMIT" 
)

while IFS='=' read -r key value; do
    curl_opts+=( -F "variables[$key]=$value" )
done <<< "$properties"

curl "${curl_opts[@]}" https://gitlab.url.net

私の考えでは、このコードが正確であるだけでなく、読みやすくなります。

また、ALL_CAPS_VARNAMESを使用しないでください。これをシェル予約として扱います。

おすすめ記事