x??
é expandido no momento da chamada de função. Então sua função já é chamada com xaa xab xac
....
A maneira mais simples seria alterar a ordem dos seus parâmetros:
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
}
(veja como eu coloco "
em torno de cada variável - isso é para evitar que coisas ruins aconteçam se você tiver espaço em branco nos nomes dos arquivos, o que geralmente acontece com os arquivos de áudio)
e chame-o com makeaudiobook haskell x??
, i. e. com argumentos rotacionados.