갑자기 *
작동이 중지되었습니다. 간단한 절차:
#!/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
일치하지 않는 패턴이 빈 문자열로 확장됩니다.