[Top][All Lists]

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

Re: Failed make doc for Patchy

From: David Kastrup
Subject: Re: Failed make doc for Patchy
Date: Wed, 14 Mar 2012 22:27:52 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.94 (gnu/linux)

Carl Sorensen <address@hidden> writes:

> On 3/14/12 3:12 PM, "David Kastrup" <address@hidden> wrote:
>>I backed it out of staging.  Try again.
> Thanks, David.  I guess if I figure out another fix, I'll have to try it
> on lilydev to make sure it works there as well as here.

Afraid so.  bash has no problem with echo '\v', but dash, the default
/bin/sh in Ubuntu, cranks out a vertical tab.

And the MacOSX /bin/sh is the first shell I heard of that does not grok
echo -n.

Autoconf offers the following in "portable shell programming":

     The simple `echo' is probably the most surprising source of
     portability troubles.  It is not possible to use `echo' portably
     unless both options and escape sequences are omitted.  Don't
     expect any option.

     Do not use backslashes in the arguments, as there is no consensus
     on their handling.  For `echo '\n' | wc -l', the `sh' of Solaris
     outputs 2, but Bash and Zsh (in `sh' emulation mode) output 1.
     The problem is truly `echo': all the shells understand `'\n'' as
     the string composed of a backslash and an `n'.  Within a command
     substitution, `echo 'string\c'' will mess up the internal state of
     ksh88 on AIX 6.1 so that it will print the first character `s'
     only, followed by a newline, and then entirely drop the output of
     the next echo in a command substitution.

     Because of these problems, do not pass a string containing
     arbitrary characters to `echo'.  For example, `echo "$foo"' is safe
     only if you know that FOO's value cannot contain backslashes and
     cannot start with `-'.

     If this may not be true, `printf' is in general safer and easier
     to use than `echo' and `echo -n'.  Thus, scripts where portability
     is not a major concern should use `printf '%s\n'' whenever `echo'
     could fail, and similarly use `printf %s' instead of `echo -n'.
     For portable shell scripts, instead, it is suggested to use a
     here-document like this:

          cat <<EOF

     Alternatively, M4sh provides `AS_ECHO' and `AS_ECHO_N' macros
     which choose between various portable implementations: `echo' or
     `print' where they work, `printf' if it is available, or else
     other creative tricks in order to work around the above problems.

The problem with a here-document is that it requires passing newlines
into the shell script, and that is something that Make does not care

David Kastrup

reply via email to

[Prev in Thread] Current Thread [Next in Thread]