【Shell】アンダーバーの変数を使うと値がおかしくなる?

パスの文字列からファイル名を取得しようとしたところ、なんかおかしい現象が発生した。


fpath='/a/b/c.d.e'
echo $fpath
# ファイル名を取り出す(拡張子あり)
faname_ext=\"${fpath##*/}\"
echo $faname_ext
# ファイル名を取り出す(拡張子なし)
fname=\"${fname_ext%.*}\"
echo $fname
# 拡張子を取り出す
fext=\"${fpath##*.}\"
echo $fext
# ディレクトリを取り出す
fdir=\"${fpath%/*}\"
echo $fdir

アンダーバー付きの変数を使っていると、結果は、

/a/b/c.d.e
c.d.e

e
/a/b

しかし、

fpath='/a/b/c.d.e'
echo $fpath
# ファイル名を取り出す(拡張子あり)
fanameext=\"${fpath##*/}\"
echo $fanameext
# ファイル名を取り出す(拡張子なし)
fname=\"${fanameext%.*}\"
echo $fname
# 拡張子を取り出す
fext=\"${fpath##*.}\"
echo $fext
# ディレクトリを取り出す
fdir=\"${fpath%/*}\"
echo $fdir

アンダーバーなしの変数を使うと、結果は、

/a/b/c.d.e
c.d.e
c.d
e
/a/b

値が正常に取れる。

理由がわからない。Shellではアンダーバー付きの変数は使わない方がいいのかな?