Thanks for your quick response! That was really fantastic and impressive!
> On 24 Nov 2017, at 10:34 am, Assaf Gordon <assafgor...@gmail.com> wrote: > > tag 29421 notabug > close 29421 > stop > > Hello, > > On Thu, Nov 23, 2017 at 6:01 PM, wangjian <halfmoonh...@gmail.com> wrote: >> Hi there, I think this is a bug >> >> mkdir empty_foler >> cd empty_foler >> touch a >> echo "abc" | tr [:blank:] + # you will get “+bc” as output, instead of “abc” >> touch b >> echo "abc" | tr [:blank:] # you will get “bbc” as output, instead of “abc” > > This is not a bug, simply incorrect usage of the parameters on the shell. > Your shell (e.g. bash) expands unquoted [:blank:] to match ANY > file with names matching a/b/l/n/k , and replaces them on the commandline > BEFORE executing 'tr'. > Only if no files match a/b/l/n/k, then the string '[:blank:]' is > passed on to tr as-is. > > Observe the following (in an empty directory): > > $ echo [:blank:] > [:blank:] > > $ touch a > $ echo [:blank:] > a > > $ touch b > $ echo [:blank:] > a b > > As opposed to using quotes: > > $ echo "[:blank:]" > [:blank:] > > > And so, once you created the files a and b, > the command you executed was equivalent to > echo abc | tr a b > which indeed results in "bbc". > > To avoid such issues, always quote the parameters to 'tr'. > > regards, > - assaf