답변:
느낌표는 bash에서 히스토리 확장의 일부입니다. 그것을 사용하려면 작은 따옴표 (예 :)로 묶 'http://example.org/!132'
거나 \
문자 앞에 백 슬래시 ( ) 로 직접 이스케이프해야 합니다 (예 :) "http://example.org/\!132"
.
큰 따옴표에서 느낌표 앞의 백 슬래시는 기록 확장을 방지하지만 이러한 경우 백 슬래시는 제거되지 않습니다. 따라서 작은 따옴표를 사용하는 것이 좋습니다 curl
. 따라서 URL의 일부로 리터럴 백 슬래시를 전달하지 않습니다 .
"http://example.org/\!132"
실제로 백 슬래시를 해석하지 않고 확장합니다 (POSIX 준수 이유, 나는 믿습니다).
\!
하고 큰 따옴표를 사용했습니다.
|
파이프를 작성하는 데 사용됩니다. 고객에게 스크립트를 보내는데 어떤 쉘을 실행할 것인지 확신 할 수 없다면 모두 테스트해야합니다!
Daniel이 제공 한 답변뿐만 아니라와 함께 사용하지 않는 경우 내역 확장을 사용 중지 할 수도 있습니다 set +H
.
fc -14
대신 사용하십시오. 그러나 히스토리 확장을 사용하지 않고도 할 수 있다는 것이 사실입니다. 개인적으로, 나는 사용 !$
하고 !vi
그리고 sudo !!
심지어 git add !vi:$
자주 역사 확장이 가능 떠나 보증 할 수 있습니다.
나는 작은 따옴표를 개인적으로 할 것이나, 완전성, 나는 또한이 URL이기 때문에, 당신은 인코딩 할 수 있습니다 것 !
등을 %21
예를 들어, curl -v http://example.org/%21132
.
이것은 또한 할 수 있습니다
curl -v "http://example.org/"'!'"287s87asdjh2/somepath/someresource"
또는
curl -v "http://example.org/"\!"287s87asdjh2/somepath/someresource"
bash는 인접한 문자열을 연결하기 때문에 작동합니다. 이 방법은 쉘 확장이 필요한 다른 것들이있을 때 특히 유용하므로 전체 문자열에 작은 따옴표를 사용할 수 없습니다 :
curl -v 'http://example.org/!'"287s87asdjh2/${basepath}/someresource"
!
문자는 명령 행 프롬프트에서 히스토리 확장에 사용됩니다.
따라서 이것은 프롬프트에서는 문제가 될 수 있지만 쉘 스크립트 파일에서는 문제가되지 않습니다.
역사 확장은 큰 따옴표로도 작동합니다.
Bash 4.3 이후로 이제 큰 따옴표를 사용하여 내역 확장 문자를 인용 할 수 있습니다.
$ bash --version
GNU bash, version 4.3...
[...]
$ echo "Hello World!"
Hello World!
echo
, 에코 다르게 자체적으로이 문제를 해결할 것
bash
버전은 확장되지 않은 뱅과 아무런 관련이 없으며, 이는 예제에서 !
"줄 끝"이 뒤 따르고 쉘이 확장하려고 시도하지 않기 때문입니다. 시도 하면 답장을 echo "!Hello World"
볼 수 있습니다. 자세한 내용은 매뉴얼을 참조하십시오bash
bash: !Hello: event not found
Windows에서 git bash를 사용하는 사람들에게는 @DanielPittman의 대답이 작동합니다. 그러나 백 슬래시 (\)를 슬래시 (/)로 바꾸어야합니다.
예를 들어, 유닉스에서는 다음과 같이 보일 것입니다.
curl https://abc.com/services -H 'Authorization: Bearer 111A80BBZZCnS\!ZR412543s'
Windows의 경우 다음과 같습니다 (권한 헤더 부분의 슬래시에 초점)
curl https://abc.com/services -H 'Authorization: Bearer 111A80BBZZCnS/!ZR412543s'