나는 뭔가를하고 싶다. bzr commit -m "It works!"
. 나는 일을함으로써 감탄 부호를 피할 수있다. bzr commit -m "It works\!"
. 그러나 커밋 메시지에는 백 슬래시가 포함됩니다. 역 슬래시를 무시하면서 느낌표를 벗어나는 방법은 무엇입니까?
bzr commit -m "It works!"
나는 뭔가를하고 싶다. bzr commit -m "It works!"
. 나는 일을함으로써 감탄 부호를 피할 수있다. bzr commit -m "It works\!"
. 그러나 커밋 메시지에는 백 슬래시가 포함됩니다. 역 슬래시를 무시하면서 느낌표를 벗어나는 방법은 무엇입니까?
bzr commit -m "It works!"
답변:
커밋 메시지에서 변수를 확장하기 위해 bash에 의존하지 않으므로 대신 작은 따옴표를 사용할 수 있습니다. 작은 따옴표로 묶은 문자열은 bash에 의해 확장되지 않습니다.
bzr commit -m 'This does work!'
느낌표와 함께 큰 따옴표를 사용하려는 경우 다음과 같은 또 다른 방법이 있습니다.
echo "It's broken"'!'
이것은 !
선의 끝에 있지 않습니다.
예를 들면 :
echo "hello there"'!'" and goodbye"
보너스 : 유사한 기술을 사용하여 탈출 할 수 있습니다. 어떤 Sh 또는 Bash의 텍스트 (sed의 도움으로) :의 첫 번째 옵션을 참조하십시오. 이 대답 . 또한, bash-completion
설치되어있을 가능성이 있습니다. 그만큼 quote()
기능 이미 사용할 수 있습니다.
echo "Happy birthday!"
그렇지 않으면 백 슬래시로 이스케이프 처리 할 수 있지만 백 슬래시도 인쇄됩니다. XD 배쉬는 희미한 하트가 아닙니다.
echo "Happy Birthday!"
2 라인을 출력합니다. 첫 번째는 echo "Happy birthday"
(느낌표 없음), 두 번째는 "생일 축하합니다"(다시 느낌표 없음)입니다. 이 테스트를 할 때 기록 확장 기능이 켜져 있습니까?
version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
, 확실히 단 하나 !
사용되고있다. 나는 가지고있다 histexpand
선물 $SHELLOPTS
. 그러나, 나는 다른 컴퓨터에서 4.3.18 (2) -release를 시도했지만 설명대로 행동한다. 버그가 수정 된 것 같습니다.
끄다 역사 확장 :
set +H
또는
set +o histexpand
해당 명령 중 하나를 명령에 추가 할 수 있습니다. ~/.bashrc
일반적으로 히스토리 확장을 사용하지 않는 경우.
Bash 4.3에 a가 추가되었습니다. 특별한 상황 :
역사 확장 문자는 큰 따옴표로 묶인 문자열에서 닫는 큰 따옴표 바로 앞에 오는 경우 따옴표로 처리됩니다
set +o histexpand
, 아니라 set -o histexpand
. 이 문제를 해결하기 위해 답을 수정할 수 있습니까?
.bashrc
쓰라 구 !! !
스크립트와 아무것도! 항상 골치 아팠다.
echo "@AquariusPower!"
방금 다른 방법을 찾았습니다. echo
느낌표를 사용하여 구두점을 표시하려는 문장 (문장)을 선택하십시오. 그것은 Bash 히스토그램 (histexpand)을 중심으로 다소 차이가 있으며 코드 작성에 조금 더 오래 걸립니다.
목록에있는 느낌표의 16 진수입니다. http://www.ascii-code.com/ , 21입니다. \x21
당신의 끈의 끝에, echo -e $foo
, 만들다 $foo
자체 확장 된 반향 [ie, foo=$(echo -e "$foo")
], 당신이 얻을 때 당신이 얻는 것 echo $foo
다시 문자열이 있습니다. !
결국. 그리고 전환 histexpand도.
Bash 4+에서 확실히 작동합니다. 이전 버전, ymmv.
printf "OMG\041"
. 에코 또는 printf가 아닌 큰 따옴표로 묶인 문자열을 작성하는 경우 OP에서 묻는 커밋 문자열처럼 embed 할 수 있습니다. $(echo -e "\041")
느낌표가 있어야하는 문자열에. 이렇게 : bzr commit -m "This is a great commit$(echo -e "\041")"
.
bzr commit -m "It works"!
작동합니다.