이 명령은 echo !"
오류 메시지를 반환합니다. 그러나 명령은 echo "Hello!"
성공했습니다. 명령이 올바르게 사용되었습니까 echo "Hello!"
?
답변1
Bash를 실행하고 있다고 가정하면 !
트리거는역사적 확장. 켜져 있고 예를 들어 를 쓰면 !echo
로 시작하는 마지막 명령으로 대체됩니다 echo
. 이 기능은 원래 csh에서 제공되었으며 다른 쉘에서 이를 지원하는지는 모르겠습니다.
히스토리 확장은 가장 똑똑한 기능이 아닙니다. 예를 들어 !"
항상 실패하는 것처럼 보이더라도 이를 트리거합니다(실행 "echo" foo
한 다음 시도해도 !"
여전히 실패합니다). 짜증나게도 in과 같은 내부 큰따옴표도 트리거됩니다 echo "!hello"
. Bash 3.2에서도 echo "hello!"
트리거되었지만 새 버전에서는 이것이 변경된 것 같습니다.
내 제안은 그것을 끄고 Bash의 시작 파일에 set +o histexpand
넣는 것 입니다.set +H