? LS 디렉토리 검색에서 와일드 카드가 예기치 않은 결과를 생성 함


1

CLI (명령 줄 인터페이스)를 중단하려고합니다.

전체 루트 디렉토리에서 다음을 수행했습니다.

root@droplet:/# ls ?tc

etc결과 목록에 디렉토리 만 가져올 것으로 예상했습니다 .

그러나 파일과 디렉토리의 거대한 목록을 얻었습니다. 이 목록은 ls추가 기준없이 단순히했을 때보 다 훨씬 길었습니다 . 왜?

답변:


2

나는 당신이 하나의 결과가 반환되기를 기대하고 있다는 문구에서 추측하고 있습니다.

# ls ?tc
etc

하지만 실제로 몇 가지 결과를 얻었습니다.

물음표는 다음에 의해 정의 된 글러브 문자입니다 .

?

와일드 카드 . 이 ?문자는 확장 정규 표현식에서 한 문자를 표시 할뿐만 아니라 글 로빙에서 파일 이름 확장을위한 단일 문자 "와일드 카드"의 역할을합니다.

와일드 카드가 1 로 전달되기 전에 쉘에 의해 확장되었을 수 있습니다 (아마도 bash) . 그래서 그것을 다음과 같이 취급했습니다 :lsls

# ls etc

의 많은 '파일과 폴더 2 '를 반환했을 것 입니다 /etc.


1 : 다음 을 시도하여 명령이 실행 되기 전에 확장이 발생하는지 테스트 할 수 있습니다 echo *.-이렇게하면 현재 디렉토리의 파일과 디렉토리가 에코됩니다.

2 : 명령 줄을 이해하려면 'directory' 라는 용어 를 'folder'보다 선호하십시오 :-)


설명해 주셔서 감사합니다. '폴더'를 '디렉토리'로 편집하고 변경했습니다. 원래는 Windows 사용자입니다. 용서해주십시오.;-) ... 후속 질문이 있습니다. 이름이 3 글자이고 마지막 두 문자가 'tc'인 모든 파일과 디렉토리를 나열하고 싶다고 가정 해 봅시다. ''를 사용할 수있는 방법이 있습니까? 이러한 기준을 충족하는 항목을 나열하는 와일드 카드로? 그렇지 않은 경우 작업을 수행 할 다른 와일드 카드 문자가 있습니까?
thanks_in_advance 19:35에

천만에요! 그것은 작은 것, 용어입니다. 그러나 도움이됩니다 ;-) 당신의 보충적인 질문을 위해서, 그것은 단지 bash유일한 것이어야 합니까? 그렇지 않으면 다음과 같이 마침표 ( .) 문자로 grep을 사용할 수 있습니다 ls / | grep .tc. ( 예를 들어 robelle.com/smugbook/regexpr.html 참조 )
bertieb

반드시 그럴 필요는 없습니다 bash. 사실 이것은 저 bashgrep저의 차이점에 대한 좋은 예입니다 . 그래서 여기에 대한 추가 정보가 있습니다. 감사! (그리고 여기이 디렉토리 매개 변수가 순수와 트릭 할 것 같은데요 bash: superuser.com/questions/25910/...를 )
thanks_in_advance

bash:) 의 광기에 오신 것을 환영합니다 :) 당신은 정확히 맞으며 그 매개 변수는 나에게 새로운 것입니다 (엄격히 ls반대 의 매개 변수입니다 bash). 그것은 파이프 / 리디렉션 ( |) 할 필요가 없다는 것을 의미합니다 grep: ls -d /?tc설명대로 작동합니다!
bertieb

추신 bash: 조금 더 익숙해지면 스크립팅을 시작하면 가지 일반적인 함정문제점 을 파악하는 것이 좋습니다. 좋은 사냥!
bertieb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.