What fun!

* On 07 Apr 2016, Cameron Simpson wrote: 
> 
> Ah. I like zsh for my interactive shell. But we always leave root's shell
> alone. However, I am a _very_ strong advocate for writing scripts for
> /bin/sh, and avoiding bashisms for exactly your reasons above. Am I alone in
> wincing everytime I hear the term "bash scripting" these days?

No, you're not. :) I haven't brought myself to use zsh yet, because
I do a lot of /bin/sh snippet teseting in my interactive shell and I
like it to interpret bourne code correctly.  Bash does, but zsh does
not -- even with all the compatibility options set.  There are certain
bourne sequences that zsh does the wrong thing with, and that affects my
scripting.


> > Though, the
> > switch in many Linux distros to dash as the system shell has somewhat
> > thwarted me--dash isn't (IMO) usable as an interactive shell, has some
> > issues as a scripting shell, and has slightly different semantics (BSD
> > vs.  SysV echo, for instance) than bash on some oft-used builtins,
> > etc..  I find this extremely annoying.  I get why they did it, but I
> > think it would have been a much better idea to produce a
> > bash-workalike shell for the subset of features they wanted to
> > support.  Or patch dash to behave the same where its supported
> > features differ.  Anyway, I digress.
> 
> Oh, please digress!

I tend to like dash, although my experience of it is limited.  I didn't
like ash but dash seems pretty solid so far.  And its code is quite
readable.  This is excellent.  Bash is a morass.


> but printf for parameterised output:
> 
>  printf '%s\n' "$arbitrary_value"

I've started leaning on printf for newline-less printing lately -- it's
just easier.  But you must be careful to use 'printf %s "$foo"' instead
of just 'printf $foo', since otherwise a % in input can thwart.

> and I have my own script "necho" for "echo with no newline" for the
> appropriat platform (or I make a shell function necho() calling printf for
> the same purpose, depending on context). Then one can go:

Let's see if I can get this right from memory:
        case "`echo -n`" in)
                -n)     necho () { echo "$@""\c"; };;
                *)  necho () { echo -n "$@"; };;
        esac

Speaking of which, it's taken me until the last year to use $(command)
consistently instead of `command`, and I'm not sure anymore why I was
a stickler.  I assume some older shell didn't support $() but I can't
recall which.

-- 
David Champion • d...@bikeshed.us

Reply via email to