拡張子を変更する関数 chext を示します。
これを使えば簡単に拡張子を変更したファイル名を得られます。

zshでは「$変数名:r:拡張子」と短く記述できますが、
fishでは簡単なシェル関数を定義します。

やや冗長ですが、記憶への負荷が低いです。

関数

~/.config/fish/functions/chext.fish に以下の内容を書きます。

function chext
	string replace -r '\.[^.]+$' .$argv[2] $argv[1]
end

実行例

$ set -x file foo.wav
$ echo $file
foo.wav
$ chext $file mp3
foo.mp3
$ echo $file (chext $file mp3)
foo.wav foo.mp3
$ zsh
zsh $ echo $file $file:r:mp3                                 
foo.wav foo:mp3

最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。