clean_version=${project_version%%-*}
é a coisa correta para usar como você descobriu.
%
e %%
correspondem no end por definição, por isso não há necessidade de uma âncora como $
dizer correspondência no final.
Para referência #
e ##
correspondem no início.
O caso interessante é a expansão /
, que corresponde a qualquer lugar por padrão. Aqui, o caractere primeiro sendo #
ou %
força o padrão a corresponder no início ou no final.