我使用${parameter#word}
和${parameter%word}
删除字符串的前缀和后缀。
$ x=2012-hello.jpg
$ y=${x#*-}
$ z=${y%.*}
$ echo $z
hello
我怎样才能一次性完成它们而不是两次完成?
答案1
使用参数扩展是不可能的,但是使用正则表达式匹配是可能的:
x=2012-hello.jpg
[[ $x =~ .*-(.*)\.jpg ]] && echo ${BASH_REMATCH[1]}
答案2
如果您同意使用sed
而不是参数扩展:
x=2012-hello.jpg
$ z="$(sed -e 's/.*-\(.*\)\..*/\1/' <<<"$x")"
$ echo "$z"
hello