파일을 검색할 때
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