1

私はbashで小さな問題を抱えています。

私はこのかなり醜いラインを持っています

curl -u "$USER:$PASS" --request POST --data '{"title": "'$BRANCH_NAME'", "body": "'$DESCRIPTION'", "head": "'$OWNER':'$BRANCH_NAME'", "base": "develop"}' https://api.github.com/repos/$OWNER/$REPO_NAME/pulls

これらの変数のほとんどが単一の単語である場合、$ DESCRIPTIONは複数になる可能性がありますが、それは一線を画しているようです。

$ DESCRIPTIONに複数の単語が含まれている場合にcurlコマンドを中断しないようにする方法はありますか?

4

3 に答える 3

11

here-docを使用すると、脳にとってより安全になります。

curl \
    -X POST \
    -H "Content-type:text/json" \
    -d@- \
    "https://api.github.com/repos/$OWNER/$REPO_NAME/pulls" <<EOF
    {
        "title": "$BRANCH_NAME",
        "body" : "$DESCRIPTION",
        "head" : "$OWNER:$BRANCH_NAME",
        "base" : "develop"
    }
EOF
  • -Xスイッチは同じ--request
  • -dスイッチは同じ--data
  • d@-存在する場合は置き換えることができます-d@/dev/stdin
  • @for -dswitch はファイルから読み取ることを意味します

シンプルで適切な解決策 =)

于 2013-02-13T22:04:23.990 に答える
3

変数は "" 引用符で囲む必要があります。お気に入り:

curl -u "$USER:$PASS" --request POST --data '{"title": "'"$BRANCH_NAME"'", "body": "'"$DESCRIPTION"'", "head": "'"$OWNER"':'"$BRANCH_NAME"'", "base": "develop"}' "https://api.github.com/repos/$OWNER/$REPO_NAME/pulls"

あるいは、次のようにすることもできます (おそらくそうするべきです)。

data="$( printf '{"title": "%s", "body": "%s", "head": "%s:%s", "base": "develop"}' "$BRANCH_NAME" "$DESCRIPTION" "$OWNER" "$BRANCH_NAME" )"
curl -u "$USER:$PASS" --request POST --data "$data" "https://api.github.com/repos/$OWNER/$REPO_NAME/pulls"
于 2013-02-13T21:46:33.953 に答える
0

$DESCRIPTION複数の単語を指定できるため、次のように二重引用符で囲む必要があります。

curl -u "$USER:$PASS" --request POST \
     --data '{"title": "'$BRANCH_NAME'", "body": "'"$DESCRIPTION"'", \
              "head": "'$OWNER':'$BRANCH_NAME'", "base": "develop"}' \
     https://api.github.com/repos/$OWNER/$REPO_NAME/pulls

これは自明ではない些細なことですが、この"'"$DESCRIPTION"'"セクションには、一重引用符で囲まれた値の中に二重引用符があり--dataます。次に、一重引用符が(一時的に)終了し、二重引用符で"$DESCRIPTION"囲まれ、新しい一重引用符で囲まれたセクションが始まり、内部の最初の文字が二重引用符になります。

一貫性と将来性を確保するために、他の変数も同様に囲む必要があります。

curl -u "$USER:$PASS" --request POST \
     --data '{"title": "'"$BRANCH_NAME"'", "body": "'"$DESCRIPTION"'", \
              "head": "'"$OWNER"':'"$BRANCH_NAME"'", "base": "develop"}' \
     https://api.github.com/repos/$OWNER/$REPO_NAME/pulls

すべてのシェル変数値で一重引用符と二重引用符の両方を避けるようにしてください。そのような引用について心配しなければならない場合、あなたはそれを正しくするのに悪夢を見るでしょう.

于 2013-02-13T21:47:15.713 に答える