나는 기대했다 :
$ rm *(1)*
(1)
이름에 포함 된 모든 파일을 제거합니다 . 내가 틀렸어. 디렉토리의 모든 파일을 제거했습니다.
왜?
답변
보낸 사람 man bash
:
*(pattern-list)
Matches zero or more occurrences of the given patterns
0 이상으로 시작하는 1
파일 (모든 파일) 과 일치하는 glob 표현식이 있습니다.
이 globbing 동작을 비활성화하는 간단한 방법 중 하나 \
는 괄호 를 피하는 것입니다.
rm *\(1\)*
그렇지 않으면 shopt -u extglob
동작을 비활성화하고 shopt -s extglob
다시 활성화하는 데 사용할 수 있습니다.
shopt -u extglob
rm *(1)*
shopt -s extglob
로합니다 스테판 말한다 , extglob
으로 활성화되어 bash-completion
있으므로 정상적으로 작동하지 완성 기능을 발생할 수 비활성화.
답변
이것은 아마도 extglob
쉘 옵션 과 관련이 있습니다. 끄면 패턴이 오류 메시지를 생성합니다.
martin@dogmeat:~$ shopt -u extglob
martin@dogmeat:~$ shopt extglob
extglob off
martin@dogmeat:~$ echo *(1)*
bash: syntax error near unexpected token `('
내가 켜면 실제로 모든 것과 일치하는 것 같습니다. 맨 페이지는 이러한 패턴을 문서화하며 관련이 있다고 생각합니다.
If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized. In the following
description, a pattern-list is a list of one or more patterns separated
by a |. Composite patterns may be formed using one or more of the fol‐
lowing sub-patterns:
?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
+(pattern-list)
Matches one or more occurrences of the given patterns
@(pattern-list)
Matches one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns
선행 문자가없는 괄호가 무엇인지 지정하는 문서는 없습니다. 어쨌든 다음과 같이 괄호를 인용하여 문제를 피할 수 있습니다.
martin@dogmeat ~ % echo *\(1\)*
A(1)b
또한, 사용 echo
또는 ls
해당 작업의 절대적으로 확실하지 않은 첫 번째 경우 패턴을 테스트 🙂