Sem ls
, já que você está apenas preenchendo sua lista com shell globs, você pode cortar o intermediário como:
glob_hsli()(IFS=.;set +f
set -f -- '' hsli*.*.h5
for h5 do case ${h5#*.} in
(*[!0-9]*.*|.*|'') : ;;
(*) set $h5 "${1:-0}";
shift $((3>>($2>$4)));;
esac;done
printf "0.%d\n" "${1:?No Match Found!}"
)
Chame-o sem argumentos e ele irá glob seus arquivos hsli*
e somente imprima a primeira parte *.string.h5
do meio nos resultados para o diretório atual, ou ele retornará com erro e uma mensagem de erro significativa será impressa para stderr se não pode fazê-lo.