On Tue, Dec 18, 2012, at 06:02 AM, Marc Espie wrote:
> On Tue, Dec 18, 2012 at 11:47:59AM +0100, Alexander Hall wrote:
> > 
> > 
> > Andres Perera <[email protected]> wrote:
> > 
> > >On Mon, Dec 17, 2012 at 7:07 PM, Alexander Hall <[email protected]>
> > >wrote:
> > >>
> > >> For scripting, echo is one of the commands I tend to avoid unless I
> > >know the
> > >> data is "safe", because of it's horrific argument parsing.
> > >>
> > >> I've yet to find a way to echo a single '-n' using the sh/ksh
> > >builtin. When
> > >> printing unknown data, I usually end up using 'print -r -- "$var"'
> > >(or
> > >> 'printf "%s" "$var"' if I care about portability).
> > >>
> > >> /Alexander
> > >>
> > >
> > >the worrysome part is what happens with make:
> > >
> > >andres@pote:~ $ echo '/nonexsistent:;@echo -e hello' | make -f- | vis
> > >-e hello\$
> > >andres@pote:~ $ echo '/nonexsistent:;@echo -e hello;' | make -f- | vis
> > >hello\$
> > >
> > >this is due to the optimization to fork+exec instead of shell when
> > >there are no meta characters. the second makefile has `;', so the
> > >optimization doesn't get triggered
> > >
> > >what is the problem? 2 echos that disagree or the optimization itself?
> > >are the calls coming from *INSIDE* the house?
> > 
> > I don't think make should optimize this, but recognize echo as a shell 
> > builtin.
> Is this theoretical, or is there an actual Makefile where this is a
> problem ?
> 
> I'd rather NOT go through extra shell forking just for the sake of it.
> 
> Also, echo -e is specific to ksh and NOT a posix option, so you're going
> to end up with something that is deeply non-portable.
> 
> Either way, this is fucked up.
> 

echo is Legacy.
It is non standard and should never be used.
Please use print or printf

No need to rewrite any old scripts...

Reply via email to