나는 최근에 다음 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??
즉, 회전 매개변수를 사용하여 이를 호출하는 데 사용되었습니다 .