'for 'file' in'에서 얻은 변수 'file'을 사용하고 다른 스크립트로 전달하는 데 실패합니다.

'for 'file' in'에서 얻은 변수 'file'을 사용하고 다른 스크립트로 전달하는 데 실패합니다.

.mkv현재 폴더의 모든 파일을 검색 한 다음 mediainfoI want to를 사용하여 height해당 메타데이터를 변수에 넣으려고 하는데 실패하는 것 같습니다.

이 스니펫:

height=$(mediainfo "input.mkv" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;

훌륭하게 작동합니다. 파일 이름을 수동으로 삽입하면 원하는 결과가 출력됩니다.

# height=$(mediainfo 'input.mkv' | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
Height : 720 pixels
720

for file in그러나 파일 이름을 수동으로 삽입할 필요가 없도록 이를 내 디렉터리에 넣으려고 하면 계속 실패합니다.

for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done 

변수의 출력은 $height비어 있습니다.

# for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
(null)
(null)

"$file"으로 '$file'변경해 보았지만 $file아무 것도 작동하지 않습니다. 뭔가 빠진 것이 있습니까?

답변1

귀하가 작성한 내용 *.{mkv}은 가 아닙니다 *.mkv. 따라서 루프는 *.{mkv}존재하지 않는 "파일"에 대해서만 반복됩니다. 이 경우 출력은 mediainfo비어 있습니다.

echo "$file"확인하려면 루프에 이와 같은 것을 추가하십시오.

답변2

"for file" 섹션에서 "{}"를 제거합니다. 다음과 같아야 합니다.

for file in *.mkv; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done

코드에서 "*.{mkv}"는 ".{mkv}"로 끝나는 모든 파일로 확장됩니다. 파일이 없는 것 같아서 for 문의 목록이 비어 있습니다.

관련 정보