> > Repeat-By: > a=111.1 > echo ${a//[0-9]/x} > > correctly gives "xxx.x", but > > echo ${a//[0-9]/*} > > gives a listing of files in current directory. Seems that the "*" > is expanded before replacing the pattern. > > It workes the right way at least up to bash-3.1.17(1)-release > > But if you set > > a=111 > > it doesn't even work in 3.1.17 right.
The pathname expansion of "*" is not done until after the parameter expansion substitution. That is the documented behavior. The following example shows that echo of the "***.*" pattern matches files and directories that have a "." in their name. Setting a to "111" results in a pathname pattern of "***" that matches all of the files. Double quoting the substitution prevents pathname expansion. $ echo $BASH_VERSION 3.2.25(1)-release $ touch a b c.d e.f $ ls a b c.d e.f $ a=111.1 $ echo ${a//[0-9]/*} c.d e.f $ echo "${a//[0-9]/*}" ***.* $ a=111 $ echo ${a//[0-9]/*} a b c.d e.f $ echo "${a//[0-9]/*}" *** $ -- Mike Stroyan <[EMAIL PROTECTED]>