如何同时进行左右剥离?

如何同时进行左右剥离?

我使用${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

相关内容