#!/bin/bash
for a in ./*.flac; do
ffmpeg -i "$a" -qscale:a 0 "${a[@]/%flac/mp3}"
done
나는 며칠 전에 현재 디렉토리의 모든 FLAC 파일을 MP3 형식으로 변환할 수 있는 이 스크립트를 발견했습니다.
내가 이해하지 못하는 것은 여기 "${a[@]/%flac/mp3}"
부분 이다. 현재 파일 이름의 끝 flac를 mp3로 바꾸는 것 같습니다. 그런데 [@]
이 부분이 정확히 어떤 역할을 하는 걸까요? 정규식인가요?
답변1
짐작할 수 있듯이 값의 ${var/%flac/mp3}
끝 부분 "flac"
(있는 경우)을 $var
로 바꿉니다 "mp3"
. "${var[@]/%flac/mp3}"
같은 일을 할 것이다각${var[@]}
if의 출력 요소 var
는 배열입니다.
여기서는 a
배열이 아니기 때문에 삭제할 수 있습니다. [@]
(이는 이전 프로그래머들의 시도의 유산이라고 생각합니다.)
답변2
이것은 간단한 쉘 확장을 만듭니다. 이 변수는 glob과 일치하는 모든 파일을 a
반복합니다 *.flac
.
각 항목은 파일이므로(파일 이름에 공백이 없다고 가정) 이는 foo.flac
및 의 확장이 됩니다.$a
${a[@]}
이 구조는 변수 끝의 를 로 ${var/%foo/bar}
대체합니다 . foo
따라서 확장자를 예제의 확장자로 대체하여 출력 파일 이름을 제공합니다.bar
var
flac
mp3
ffmpeg