On Mon, Feb 8, 2016 at 9:20 AM, Stephane Chazelas <stephane.chaze...@gmail.com> wrote: > 2016-02-08 09:00:09 -0500, Chet Ramey: >> On 2/8/16 2:47 AM, Linda Walsh wrote: >> > When you are doing a var expansion using the >> > replacement format ${VAR//./.}, is there some way to >> > put parens around some part of the expression and reference >> > them as in the [[V~re]] RE-matches? >> >> No. Shell patterns do not have backreferences. > [...] > > Note that the feature is available in other shells and quite > handy there. It could be worth adding to bash > > $ zsh -o extendedglob -c 'a=1234; echo > ${a//(#b)(?)(?)/${match[2]}${match[1]}}' > 2143 > (#b) to activate back-references stored in $match array. > > $ zsh -o extendedglob -c 'a=1234; echo ${a//(#m)?/<$MATCH>}' > <1><2><3><4> > (#m) to record the matched portion in $MATCH. > > Though I suspect for bash you would prefer the ksh93 syntax: > > $ ksh93 -c 'a=1234; echo ${a//@(?)@(?)/\2\1}' > 2143
Technically that's "grouping", but yeah it's a useful feature. ksh does backrefs in plain shell patterns also. $ ksh -c 'a=11223344; echo "${a//@(@(?)\2)@(@(?)\4)/\3\1}"' 22114433