!
컬 명령을 사용하여 경로에 느낌표( )가 있는 http url에 액세스하려고 합니다. 예를 들어:
curl -v "http://example.org/!287s87asdjh2/somepath/someresource"
콘솔이 응답합니다 bash: ... event not found
.
어떻게 되어가나요? 느낌표를 이스케이프 처리하는 올바른 구문은 무엇입니까?
답변1
답변2
Daniel의 답변 외에도 사용하지 않는 경우 기록 확장을 완전히 끌 수도 있습니다.
set +H
또는
set +o histexpand
(후자는 bash 호환성 옵션의 대체 이름인 zsh
에서도 작동합니다 .)histexpand
banghist
역사적 확장이 시작된 (t)csh에서는 변수에 빈 문자열을 할당하여 이를 비활성화할 수 있습니다 $histchars
.
set histchars = ''
또는:
set histchars
(실패하다 )unset histchars
이는 다음 구문을 사용하더라도 기능을 복제하는 bash 및 zsh에도 적용됩니다.
histchars=
거기.
bash
((t)csh 또는 zsh와 반대로) $histchars
환경에서 발견된 변수는 무시되지 않으므로 이 변수를 내보낼 때 발생할 수 있는 결과에 유의하세요 .
답변3
개인적으로 나는 작은따옴표를 사용하겠지만, 완전성을 위해 URL이므로 예 !
를 %21
들어 curl -v http://example.org/%21132
.
답변4
나는 같은 문제가 있었고 간단한 해결책은 변수를 사용하는 것입니다.
E=!
curl -v "http://example.org/${E}287s87asdjh2/somepath/someresource"
여기서의 단순성은 (1) 쉘과 명령 간에 이식 가능하고 (2) 이스케이프 구문과 ASCII 코드를 알 필요가 없다는 것입니다.