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