[!set] zsh로 히스토리 확장을 호출할 때

[!set] zsh로 히스토리 확장을 호출할 때

파일을 검색할 때

ls [a-t]est.txt

test.txt예상한 결과를 제공합니다.

그러나 내가 사용할 때

ls [!a-g]est.txt

출력은 다음과 같습니다ls [aptg]est.txt

[!set]의 다른 예:

  • ls [!b-z]est.txt반품[bbz]est.txt
  • ls [!g-h]est.txt반품ls [git clone --depth=1h]est.txt

내 zsh에 문제가 있나요? 아니면 [!set]이 zsh에서 다르게 작동하나요?


머신은 Linux Mint 18.2입니다.

답변1

Steeldriver가 제안한 대로 대신 make [!set]를 ^수행하면 !문제가 해결됩니다.

그 이유는 히스토리 확장이 zsh 에서 !실행되기 때문입니다. 이런 일이 발생하지 않도록 하려면 기록 확장을 비활성화하세요. 이렇게 하려면 setopt nobanghist명령줄에서 실행하세요.

답변2

히스토리 확장을 피하는 한 가지 방법은 !백슬래시를 인용하는 것입니다.

ls [\!a-g]est.txt

^물론 집합을 부정할 때는 치환을 사용하는 것이 더 쉬울 수도 있습니다 !.

!"또 다른 방법은 (이전의) 첫 번째 문자 앞 아무데나 (정말로!) 문자 시퀀스를 추가하여 히스토리 확장을 일시적으로 비활성화하는 것입니다 !. !"삭제되며 이후의 콘텐츠는 !특별한 의미가 없습니다.

!" ls [!a-g]est.txt
ls !" [!a-g]est.txt
ls [!"!a-g]est.txt
l!"s [!a-g]est.txt

관련 정보