2016-10-06 6 views
1

bash를 globbing하는 표현에 대해 오해했기 때문에 여기에 올리고 있습니다. 나는 POSIX 표현이 특정 유형의 정의 (대괄호와 사람)를 읽고, 테스트 동안, 그 시험했다 :BASH - 대괄호로 표현하는 대괄호 : [... -..]

bash-3.2$ ls 
a.out c.cou tab_maker.c 

bash-3.2$ ls [!c-t] 
ls: [!c-t]: No such file or directory 

bash-3.2$ ls [!c-t]* 
a.out 

bash-3.2$ ls [!c-to]* 
a.out 

bash-3.2$ ls [!cv-to]* 
a.out tab_maker.c 

bash-3.2$ 

는 내가 이해하지 못하는 것은 bash는이 해석 않는 방법입니다 명령? 내가 ls [!c-t]*을 할 때, bash는 a.out만을 잡는다. (논리적이다.) 왜 마지막 테스트에서 tab_maker.c를 잡을 까? 내가 알아야 할 것이 있거나 정의되지 않은 행동인가?

+0

스크린 샷에 링크하는 대신 코드에 질문을 붙여 넣을 수 있습니까? – choroba

+0

죄송합니다. :) –

답변

1

vt 사이에 문자가 없기 때문에 [v-t]과 일치하는 내용이 없습니다. 따라서 [!cv-to][!co]과 같습니다.

[t-v]을 대신 사용해보십시오.

+0

흠, 나는 그것이 왜 그렇게하는지 이해하지 못합니다. 괄호 사이의 대시 양쪽에 1 문자 이상을 입력 할 때 우선 순위가 있습니까? –

+0

't'와'v' 사이에는't, u, v'가 있습니다. 'v'와't' 사이에는 아무것도 없습니다. '-' 앞에있는 문자는 그 뒤에 오는 문자 앞에 알파벳순으로 (또는 동일하게) 먼저 와야합니다. – choroba

+0

그래, 내가 이해하지 못하는 것은 '[! co]'와 동등한'[! cv-to] '를 고려하는 이유이다. 내가 이해하지 못하는 것은 그 종류의 명령에 대한 규칙은 무엇인가? 예를 들어'[! ct-vo]'를 할 때't-v' 만 고려하고'c'와'o'는 고려하지 않습니까? 아니면 다른 것을하고 있습니까? –

관련 문제