Bash 함수의 for 루프

Bash 함수의 for 루프

나는 최근에 다음 bash함수를 작성했습니다.

makeaudiobook () {
count=1
almbumartist=$2
for f in $1; do
        preprocess $f > $f-preprocessed
        text2wave $f-preprocessed -o $f.wav
        lame -b 16 --tt $f --ta $albumartist --tl $albumartist --tn $count $f.wav $f.mp3
        rm -rf $f.wav $f-preprocessed
        count=$(($count+1))
done
}

예상대로 작동하지 않습니다. NET에서 지정한 glob 표현식과 일치하는 모든 파일을 반복하지는 않습니다 $1. 하나의 라이너로서 이것은 작동합니다. 한 줄로 작성하는 것이 지겨워서 실제로 함수로 전환했습니다. 하지만 bash기능으로는 작동하지 않습니다. 그러면 그것이 작동하도록 하려면 어떻게 해야 합니까?

split나는 출력과 같은 것에 대해 그것을 호출 할 수 있기를 원합니다 .

me@localhost$~ makeaudiobook x?? haskell

... x??xaa, xab, xac 등과 일치합니다. 내가 말했듯이, 한 줄짜리로는 괜찮습니다. 그러면 이 glob 표현식을 에 전달하려면 어떻게 해야 합니까 $1?

답변1

x??함수가 호출되면 확장됩니다. 그래서 귀하의 함수가 호출되었습니다 xaa xab xac... .

가장 간단한 방법은 매개변수 순서를 변경하는 것입니다.

makeaudiobook () {
count=1
almbumartist=$1
shift
for f in "$@"; do
        preprocess "$f" > "$f"-preprocessed
        text2wave "$f"-preprocessed -o "$f".wav
        lame -b 16 --tt "$f" --ta "$albumartist" --tl "$albumartist" --tn "$count" "$f".wav "$f".mp3
        rm -rf "$f".wav "$f"-preprocessed
        count=$(($count+1))
done
}

(각 변수를 어떻게 배치했는지 살펴보세요 ". 이는 파일 이름에 공백이 있는 경우 오디오 파일에서 흔히 발생하는 나쁜 일이 발생하는 것을 방지하기 위한 것입니다.)

makeaudiobook haskell x??즉, 회전 매개변수를 사용하여 이를 호출하는 데 사용되었습니다 .

관련 정보