Dear Cuong, 2015-11-25 16:20 GMT+07:00 Cuong Manh Le : > Hi Huy, > > It's a good point, but in the user perspective, turn off `multifuncdef` is > not much useful: > > $ unsetopt multifuncdef > $ echo 1 | grep foobar(){ echo 1; } > zsh: parse error near `()' > > You still stuck and can not use `grep`. > > The right way to use it from the beginning is quote the grep string > pattern if it contains any shell meta characters. > > Also in zsh documentation > http://zsh.sourceforge.net/Doc/Release/Options.html#index-MULTIFUNCDEF , > it said that: > > Multiple function definitions are not often used and can cause obscure >> errors. > > > Maybe we should add an example to that section. > > Best. > > > > On Wed, Nov 25, 2015 at 4:03 PM, Ngô Huy wrote: > >> Dear Cuong, >> >> 2015-11-25 15:49 GMT+07:00 Cuong Manh Le : >> >>> Hi Severus, >>> >>> Can you give a demo? >>> >>> You can turn off `multì_func_def` but you can always do multiple >>> function definition with reserved word `function` >>> >>> Best. >>> >>> >>> On Wed, Nov 25, 2015 at 11:20 AM, Ngô Huy wrote: >>> >>>> Dear Matthew >>>> >>>> 2015-11-25 11:06 GMT+07:00 Matthew Martin : >>>> >>>> > On Tue, Nov 24, 2015 at 9:46 PM, Ngô Huy >>>> wrote: >>>> > > Dear folks, >>>> > > >>>> > > I found the problem in zsh define function. Demo >>>> > > >>>> > > ls test() { echo "Bug !!!"} && ls && test >>>> > > >>>> > > it will print >>>> > > >>>> > > Bug !!! >>>> > > Bug !!! >>>> > >>>> > >>>> > That's expected behaviour. Since MULTI_FUNC_DEF is set by default in >>>> zsh >>>> > mode, both ls and test are being defined as functions with the body >>>> > echo "Bug !!!". >>>> > >>>> > % func1 func2 () { echo This is "$0"; } >>>> > % func1; func2 >>>> > This is func1 >>>> > This is func2 >>>> > % which func{1,2} >>>> > func1 () { >>>> > echo This is "$0" >>>> > } >>>> > func2 () { >>>> > echo This is "$0" >>>> > } >>>> > % unsetopt MULTI_FUNC_DEF >>>> > % func1 func2 () { echo This is "$0"; } >>>> > zsh: parse error near `()' >>>> > >>>> >>>> I know this behavior likes advanced programming language but >>>> multì_func_def >>>> should be turned off by default, it leads to risky problem when someone >>>> searchs as grep, ls malicious strings without quote >>>> >>>> >>>> Kind regards, >>>> Severus >>>> >>> >>> this's just example: cat file | grep foobar(){ rm -rf *} >> grep wil execute rest of body >> >> Kind regards, >> Severus >> > > I don't see any case we should use multiple function definition. We also can not cover all problems with this behavior. I think we should disable it :) Kind regards, Severus