for 루프 구문 분석 ls와 그 뒤에 숨은 마법 *

for 루프 구문 분석 ls와 그 뒤에 숨은 마법 *

나는 다음 사항이 좋지 않다는 것을 알고 있습니다.

for i in `ls -1 *.MOV` ;do ...

올바른 구문은 다음과 같습니다.

for i in  *.MOV ;do ...

그러나 그 뒤에 있는 메커니즘은 무엇입니까? 내 말은, *.MOV파일 이름에 대해 이야기하고 있다는 것을 for 명령에 알려주는 부분은 무엇입니까? for"다른 매개변수가 없으면 파일 이름이 가정됩니다"라는 가정이 코드에 있습니까 ?

그리고... lsfor 내부의 출력이 끔찍하다면 차단되지 않는 사용 가능한 파일 이름 목록을 어떻게 얻을 수 있습니까?

답변1

예 :-) 쉘은 와일드카드 표현식과 일치하는 파일 세트(귀하의 경우 현재 디렉토리에 있는 MOV 파일)로 와일드카드를 확장합니다. 하지만 그러기 전에 여섯 가지 다른 확장팩을 고려해야 합니다.

"확장"은 매뉴얼에 자세히 설명되어 있습니다 man bash.

확장

확장은 단어로 분할된 후 명령줄에서 수행됩니다. 중괄호 확장, 물결표 확장, 매개변수 및 변수 확장, 명령 대체, 산술 확장, 토큰화, 경로 이름 확장 등 7가지 유형의 확장이 수행됩니다.

...

경로명 확장

단어 분할 후 bash는 -f 옵션이 설정되지 않은 한 각 단어에서 *, ? 및 [ 문자를 검색합니다. 이러한 문자 중 하나가 발생하면 해당 단어는 패턴으로 처리되고 패턴과 일치하는 파일 이름의 알파벳순 목록으로 대체됩니다(아래 패턴 일치 참조). 일치하는 파일 이름이 없고 쉘 옵션 nullglob이 활성화되지 않은 경우 단어는 변경되지 않고 그대로 유지됩니다.

관련 정보