와일드카드 작동이 중지되었습니다.

와일드카드 작동이 중지되었습니다.

갑자기 *작동이 중지되었습니다. 간단한 절차:

#!/bin/bash

for f in *.txt
do
    echo $f
done

*.txt디렉토리에 파일 대신 문자열을 생성하거나 전혀 생성하지 않습니다. 하지만 *추가 문자 없이도 잘 작동합니다. 뭐가 문제 야? 어제 작동했기 때문에 이것은 말도 안됩니다.

Bash 버전은 4.4.12(1) 릴리스입니다.

답변1

단순히 현재 디렉토리에 파일 이름 접미사가 있는 파일이 없거나 .txt스크립트 줄 끝에 캐리지 리턴과 같은 보이지 않는 문자가 있는 경우입니다.

Windows 컴퓨터에서 스크립트 텍스트 파일을 편집하고 DOS 텍스트 파일로 저장하면 캐리지 리턴이 나타날 수 있습니다.

모든 줄에서 이를 제거하려면 dos2unix스크립트 파일에서 사용하십시오.

두 경우 모두 일치하는 항목이 없기 때문에 패턴이 확장되지 않습니다. 따라서 셸은 확장되지 않은 패턴으로 유지됩니다.

일치하는 파일 이름이 없을 때 스크립트가 루프를 완전히 건너뛰도록 하려면 nullglob쉘 옵션을 설정하십시오.

shopt -s nullglob

이로 인해 bash일치하지 않는 패턴이 빈 문자열로 확장됩니다.

관련 정보