Subject: Re: ksh vs sh quoting
To: None <current-users@NetBSD.org>
From: Alan Barrett <apb@cequrux.com>
List: current-users
Date: 07/28/2004 11:10:16
On Tue, 27 Jul 2004, Patrick Welche wrote:
> All explained in TFM.. ksh(1)
> 
>        The following is a list of things that are affected by the
>        state of the posix option:
>          o    \" inside double quoted `..` command substitutions:
>               in posix mode, the \" is interpreted when the command
>               is interpreted; in non-posix mode, the backslash is
>               stripped before the command substitution is interpreted.
>               For example, echo "`echo \"hi\"`" produces `"hi"' in
>               posix mode, `hi' in non-posix mode.  To avoid problems,
>               use the $(...) form of command substitution.
>
> So it seems sh does the non-posix mode, and ksh by default does the
> posix mode.. Sure enough set +o posix fixed things for me..

Backtick command substitution has always been difficult to get right in
complex cases.  If I understand the above description correctly, then
non-posix mode is the traditional behaviour, and posix mode is some new
invention.

I recommend that you avoid `...` command substitution, except perhaps in
simple cases.  In this case, I recommend changing from

  output_cmd="`echo \"X$output_cmd\" | $Xsed -e \"$no_glob_subst\"`"

to

  output_cmd="$(echo "X$output_cmd" | $Xsed -e "$no_glob_subst")"

--apb (Alan Barrett)