bash 줄 CURL에 환경 변수를 포함시키는 방법은 무엇입니까?


39

다운로드가 완료되면 Transmission에 알리려고합니다.

이것은 작동합니다 :

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "$TR_TORRENT_NAME", \
  "body": "$TR_TORRENT_NAME completed."}'

... 단, $TR_TORRENT_NAME변수의 실제 내용이 아닌 것을 제외하고 .

견적이나 무언가를 피해야합니까?

답변:


58

작은 따옴표 내에서 쉘은 아무것도 확장하지 않습니다. 대신 큰 따옴표 안에 넣으십시오.

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": "'"$TR_TORRENT_NAME completed"'."}'

다음을보고 이것이 어떻게 작동하는지 살펴 보자.

$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}

쉘 변수가 나타나면 항상 큰 따옴표 안에 있습니다. 결과적으로 제대로 확장됩니다.

이와 같이 인용하는 것은 약간 미묘합니다. 큰 따옴표를 문자로 포함하고 큰 따옴표로 묶은 문자열 옆에 작은 따옴표로 묶인 문자열이 있습니다. 이것을 더 잘 이해하려면이 조각을 예로 들어 봅시다.

 "'"$TR_TORRENT_NAME"'"

각 캐릭터를 차례대로 복용 :

  1. "작은 따옴표로 묶인 문자열 안에있는 리터럴 큰 따옴표 문자입니다. 간결하게하기 위해이 문자열의 시작 부분은이 조각에 표시되지 않습니다.

  2. ' 작은 따옴표로 묶인 문자열을 닫습니다.

  3. " 큰 따옴표로 묶인 문자열을 엽니 다.

  4. $TR_TORRENT_NAME 큰 따옴표 안에 확장 된 쉘 변수입니다.

  5. " 큰 따옴표로 묶인 문자열을 닫습니다.

  6. ' 작은 따옴표로 묶은 새 문자열을 엽니 다.

  7. " 작은 따옴표로 묶은 문자열 안에 큰 따옴표 문자를 넣습니다.


3 단계와 5 단계가 필요하십니까?
davidfrancis

@davidfrancis 3 단계와 5 단계를 생략하면 4 단계에 단어 분할경로 이름 확장이 적용 되며 둘 중 하나가 모든 영지 문제를 일으킬 수 있습니다. 명시 적으로 단어 분할경로 이름 확장을 원하지 않는 한 쉘 변수는 항상 큰 따옴표 안에 있어야합니다.
John1024

그것에 대해 감사합니다, 당신은 빠른 예를 들어 줄 수 있습니까? 그것은 내 자신의 예에서 작동했기 때문에 내가 요청한 이유가 있지만 거기에는 공간이나 다른 복잡한 것이 없었습니다.
davidfrancis

@davidfrancis TR_TORRENT_NAME="A * B"어떤 일이 일어나는지 보십시오 .
John1024

1

변수 내용 주위에 따옴표없이 bash 라인 컬에 환경 변수를 포함 시키려면 다음과 같이하십시오.

--header 'PRIVATE-TOKEN: '"$PRIVATE_TOKEN"''

또는 본문 필드 주위에 따옴표없이 처음 설명 된 시나리오를 사용하십시오.

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": '"$TR_TORRENT_NAME completed"'.}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.