2013-02-13 3 views
1

bash에서 작은 문제가 있습니다. 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을 만들 때 curl 명령에 단어가 두 개 이상있을 때 중단하지 않는 방법이 있습니까?

답변

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" 

, 당신이 (아마해야) 할 수있는 : $DESCRIPTION 이후

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" 
+0

내가 (은' "$ 주위에 따옴표를 제외하고, 대안을 좋아하는 것을 의미 ...) "부분; 나는 그들이'printf' 논쟁의 혼란을 가져올 것이라고 생각한다. 가장 바깥 쪽 큰 따옴표를 생략하면됩니다. –

+0

아니요, 그렇지 않습니다. 생략하는 것은 아마 안전하지만 항상 인용하는 것을 선호합니다. –

+0

감사합니다. Bash 인용은 끝이 될 것입니다. 그리고 저는 두 번째 모범을 마음에 새기고 있습니다. –

0

여러 말 할 수 있습니다, 그것은 따라서 큰 따옴표로 묶어야합니다 :

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 

한번에 모든 쉘 변수 값에 단일 및 이중 모두 따옴표를 방지하기 위해; 너는 그런 따옴표에 관하여 고민해야하는 경우에 그것을 악몽에게 권리 얻는있을 것이다. (Y) 뇌 (들)에 대한 안전 할 것이다 여기-문서를 사용

11

: --request

  • -d 스위치가 동일로

    curl \ 
        -X POST \ 
        -H "Content-type:text/json" \ 
        [email protected] \ 
        "https://api.github.com/repos/$OWNER/$REPO_NAME/pulls" <<EOF 
        { 
         "title": "$BRANCH_NAME", 
         "body" : "$DESCRIPTION", 
         "head" : "$OWNER:$BRANCH_NAME", 
         "base" : "develop" 
        } 
    EOF 
    

    간단하고 적절한 솔루션에서 읽기 =)