[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: RFC: use readable $(cmd) syntax instead of unreadable `cmd`



On Fri, 9 Feb 2007, Jari Aalto wrote:

> FOREWORD
> 
>     I have seen following construct to be used in shell-context
>     (makefiles, sh-scripts, Perl):
> 
>       `cmd` [1]
> 
>     However, the POSIX standard and SUSv[23] declares alternative way of
>     accomplishing the same with in *sh context:
> 
>       $(cmd) [2]

[..]
>     All Debian *sh compatible shells support $() and are thus POSIX/SUS
>     compliant in this respect. 

[..]
> The Single UNIX Specification, Version 2 (SUSv2):
> "Shell Command Language"
> <http://www.opengroup.org/onlinepubs/007908799/xcu/chap2.html>
> 
>     ...The input characters within the quoted string that are
>     also enclosed between "$(" and the matching ")" will not
>     be affected by the double-quotes, but rather define that
>     command whose output replaces the $(...)

Your mail makes it sound like $( ) is the only command substitution
allowed by POSIX/SUSv[23]. It is not. Let me quote the _really_ relevant
section of SUSv2,
http://www.opengroup.org/onlinepubs/007908799/xcu/chap2.html#tag_001_006_003
and SUSv3 = POSIX (IEEE1003.1, 2004 Edition),
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03

    Command substitution allows the output of a command to be substituted
    in place of the command name itself. Command substitution shall occur
    when the command is enclosed as follows:

        $(command)

    or (backquoted version):

        `command`


Further, you didn't yet mention the only disadvantage of backquotes that I
personally find important enough to consider, namely that (multi-level)
nesting quickly gets horrible. So I personally tend to use $( ) only when
nesting.

And exactly that is also the only reason mentioned in the Rationale volume
of SUSv3/POSIX,
http://www.opengroup.org/onlinepubs/009695399/xrat/xcu_chap02.html#tag_02_02_06_03

    ... Because of these inconsistent behaviors, the backquoted variety of
    command substitution is not recommended for new applications __that
    nest command substitutions or attempt to embed complex scripts__.

(my underlining.)


Best regards,

  Anne Bezemer



Reply to: