bash curl 문에 '&'문자를 포함하는 방법


98

bash에서 curl을 사용하여 웹 페이지를 다운로드하려고하는데 &URL 의 기호가 원하는대로 문자로 해석되지 않습니다. 기호 &가 지루하고 특별한 것이 아니라고 bash를 설득하는 방법에 대한 아이디어 가 있습니까?


-이 당신을 도울해야 다음 항목에서 찾아 보게 stackoverflow.com/questions/2067969/...
morgents

나는 교체 해봤 &와 기호 \&, '&', "&", ^&하지만 정확하게 평가하기 위해 URL을 얻을 수 없었다. 실제로 '&'Terminal.app에서 curl 명령을 실행할 때 작동하지만 bash 스크립트에 넣고 루프로 감싸서 실행하면 실패합니다.
Chernoff

답변:


122

전체 URL을 큰 따옴표 안에 넣으면 문제가 해결됩니다.


9
변수를 확인할 필요가 없으면 작은 따옴표가 더 좋을 수 있습니다.
jpm

전체 URL에 따옴표를 사용하면 표현식 ${i}이 값을 반환하지 않습니다.
Chernoff

2
제 경우에는 작은 따옴표가 잘 작동하는 동안 큰 따옴표가 실패했습니다.
abeboparebop

3
따옴표를 입력하는 데 사용되는 프로그램에주의하십시오. 서둘러 쉘 스크립트를 편집하는 동안 텍스트 편집 프로그램을 사용했습니다. 곧은 큰 따옴표 대신 기울어 진 따옴표를 넣습니다. 이것은 실제로 스크립트를 엉망으로 만들고 문제를 찾기 어렵게 만듭니다!
David

40
curl "http://www.example.com?m=method&args=1"

&를 GET URL의 구분 기호로 사용하고 있습니까? 아니면 데이터에 있습니까?

데이터에있는 경우 HTML 문자로 인코딩해야합니다. 그렇지 않은 경우 따옴표로 묶어야합니다.

에 대한 인코딩 은 URL 에 &있어야합니다 %26.

curl "http://www.example.com?m=this%26that

나는 &당신이 보여준 것과 거의 똑같이 기호를 데이터 조각으로 사용하고 있습니다. 문제는 숫자 값 대신 사용하고 있다는 것입니다 ${i}. 그래서 저는 http://www.example.com?m=method&args=${i}URL로 평가 하고 싶습니다 .
Chernoff

3
방금 URL을 표시 한 방식은 GET 변수에 대한 구분 기호로 '&'를 사용하므로 지금은 혼란 스럽습니다. $ [i]에 '&'가 포함 된 데이터가 있습니까? 이 경우 URL 인코딩이 필요합니다. & = % 26
Matt Clark

1
전체 인터넷에서 해결책을 찾지 못했습니다. @MattClark 당신은 영웅입니다. 나는 단지 URL 인코딩 & 데이터 조각이고 내 스크립트가 잘 작동합니다.
Haris ur Rehman

1
두 번째 코드 스 니펫 끝에 누락 된 "이 있습니까?
David

23

&기호 주위에 작은 따옴표를 넣으면 작동하는 것 같습니다. 즉, http://www.example.com/page.asp?arg1=${i}'&'arg2=${j}curl 과 같은 URL을 사용 하면 요청 된 웹 페이지가 반환됩니다.


2
미래의 견해를 명확하게 할 수 있도록 질문에 대한 인수 요구 사항을 포함해야합니다.
Manatax 2014

이 답변이 승인 된 이유는 무엇입니까? 이 답변은 acceped해야 stackoverflow.com/a/13339492/2898694
Sharikov 블라디슬라프을

13

이스케이프 "&"문자를 시도하는 대신 아래와 같이 -d 매개 변수를 사용하여 POST 요청에 http url 매개 변수를 지정할 수 있습니다.

curl -X POST http://www.example.com \
-d arg1=this \
-d arg2=that

요청이 GET이면 curl에 GET 요청과 함께 데이터를 전송하도록 지시하는 -G 옵션도 추가해야합니다.

curl -X GET -G http://www.example.com \
-d arg1=this \
-d arg2=that

이것이 최고의 답변입니다! 고마워!
unbreak

이것은 나를 위해 일했습니다. 큰 따옴표 추가가 작동하지 않았습니다.
Juhog 19

9

%26대신 사용할 수 있습니다 &. 엔티티 코드가 제대로 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.