폴더 내용 확인이 성공하지 못함

폴더 내용 확인이 성공하지 못함

Bash 스크립트 스니펫

folder="some folder's name"
a="$folder/"*".pdf"
if [ "$a" != "$folder"'/*.pdf' ]
then
    echo check
fi

인쇄하지 마십시오 check.

이름이 폴더로 끝나는 check파일이 하나 이상 있는 경우에만 인쇄하고 싶습니다 ..pdf$folder

echo $a그리고 echo "$folder"'/*.pdf'인쇄할 것으로 예상되는 내용을 정확하게 인쇄합니다. *.pdf지정된 폴더에 파일이 1개 이상 있으면 전자는 일치하는 경로를 인쇄하고, 그렇지 않으면 후자가 인쇄하는 내용을 인쇄합니다. 후자는 항상 연결된 지정된 이전 이름을 인쇄합니다 /*.pdf.

  1. Bash는 왜 이렇게 동작합니까?
  2. 어떻게 작동하게 합니까?

답변1

표현식은 "$folder/"*".pdf"가능한 모든 것으로 확장됩니다 .pdf.
왜일까요? 이것*로고는 특별한 의미를 유지합니다.와일드카드.

이 문자열은 "$folder"'/*.pdf'2개의 별도 문자열 "$folder"을 연결한 것일 뿐입니다 '/*.pdf'.
~처럼*작은따옴표로 묶인 기호 - it잃다그 특별한 의미.


주요 목표를 기준으로.pdf현재 폴더에 파일이 하나 이상 있는지 확인하십시오.그리고 몇 가지 "pdf file found!"성공적인 문구를 인쇄해 보세요:

if [ ! -z `find foldername -type f -name "*.pdf" -print -quit` ]; then 
    echo "pdf file found!"
fi

답변2

큰따옴표로 묶인 내용은 ( 비교 ) 를 포함하는 문자열이기 때문에 귀하의 if명령문이 작동하지 않습니다 . 큰따옴표를 제거하면 둘 이상의 파일이 일치하면 명령문이 실패합니다.$a*echo "$a"echo $aif

don_crissti의 링크에는 훌륭한 솔루션이 있습니다.

관련 정보