ZSH가 포함 된 Apt-get * 와일드 카드


15

ZSH :

sudo apt-get remove --purge ubuntuone-* 
ERROR: zsh: no matches found: ubuntuone-*

Bash에서 작동합니다. 뭐가 문제 야 ? :-디

답변:


13

예, zsh그리고 bash이 점에서 다르게 동작합니다.

에서 zsh" ubuntuone-*" 라고 말하면 현재 작업 디렉토리에서 시작하는 파일을 찾습니다. 파일을 ubuntuone-찾을 수 없으므로 " no matches" 라고 말하고 명령을 실행하지 않습니다.

bash다른 ubuntuone-작업을 수행합니다. 현재 작업 디렉토리에서 시작하는 파일을 찾지 만 "내가 호출하는 프로그램이 와일드 카드를 처리하는 방법을 알고있을 수도 있습니다." ubuntuone-*" sudo apt-get문자 그대로의 논증.

현재 작업 디렉토리에이라는 파일이 있으면 ubuntuone-ffdjhjerbash는 실행하려고 시도하는데 sudo apt-get remove --purge ubuntuone-ffdjhjer실패 할 것입니다.

에서 zsh(와)에서 bash작은 따옴표를 사용하여 와일드 카드를 확장하지 말고 다음과 같이 전달하십시오.

sudo apt-get remove --purge 'ubuntuone-*'

2
그런 식으로 zsh를 Bash로 작동시킬 수 있습니까?
mirandalol

잘 모르겠지만, 지금까지 수행 한 약간의 연구는 '아니오'를 암시합니다. 어쨌든 쉘에서 와일드 카드를 확장하지 않으려면 bash 에서조차도 작은 따옴표로 인수를 묶는 것이 좋습니다. 와일드 카드와 일치합니다. 예를 들어, 항상 dpkg -l 'linux*'설치된 모든 커널을 보려면 bash를 입력 하십시오.
David Purdue

10

이 답변에 약간 늦을 수도 있지만 이것을 해결할 수있는 방법이 있습니다. 명령 행에서 다음을 실행하십시오.

unsetopt no_match

이것은 훌륭하게 작동합니다
neaumusic

또는 shopt -s failglobbash수정 bash 이처럼 작동하므로 zsh다른 현대적인 포탄이 좋아하는 fish또는 tcsh 그 해결 한 그 globs와 일치하지 않은 경우에도 명령이 계속 실행할 수 있습니다 그에 Bourne 쉘의 misfeature.
Stéphane Chazelas

@ StéphaneChazelas yoda
OpenCoderX

1

zsh에서 확장을 막는 다른 방법이 있는데, 따옴표보다 선호합니다.

sudo apt-get remove --purge ubuntuone-\*
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.