Não é possível com a expansão de parâmetros, mas é possível com correspondência de expressões regulares:
x=2012-hello.jpg
[[ $x =~ .*-(.*)\.jpg ]] && echo ${BASH_REMATCH[1]}
Eu uso ${parameter#word}
e ${parameter%word}
para remover o prefixo e o postfix da string.
$ x=2012-hello.jpg
$ y=${x#*-}
$ z=${y%.*}
$ echo $z
hello
Como posso fazê-las de uma só vez, em vez de duas.
Se você está certo em usar sed
em vez de expansão de parâmetro:
x=2012-hello.jpg
$ z="$(sed -e 's/.*-\(.*\)\..*//' <<<"$x")"
$ echo "$z"
hello
Tags bash