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。 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??つまり、回転パラメータを使用してそれを呼び出すために使用されました。

関連情報