Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Printing square brackets and backslashes

DervishD sent me the following 0.9K:

> >     Hi all :)
> > 
> >     $ print \[\\\]
> >     []
> >     $ /bin/echo -e \[\\\]
> >     [\]
> >     $ print -r \[\\\]
> >     [\]
> >     $ print \\
> >     \
>     I can understand the first case, but I don't understand the last
> one: in the first case, what I misunderstood is that the shell quotes
> the chars, producing "[\]" and "print" prints them, interpreting some
> escape directives: "[]". But in the last case, nothing should then be
> printed, because zsh quotes the backslash and "print" gets a single
> backslash, that is, an empty escape directive that shouldn't print
> anything :? Is "print" assuming that a single backslash is not an
> empty escape directive? Is a single, isolated backslash a synonim for
> "\\"?

This is in the zsh user's guide at:


Look under section 3.2.1, Builtins for printing.

# -------------------------------------------------------------------- 

Secondly, those backslashes can land you in real quoting difficulties.
Normally a backslash on the command line escapes the next character ---
this is a different form of escaping to print's --- so

  print \n

doesn't produce a newline, it just prints out an `n'. So you need to
quote that. This means

  print \\

passes a single backslash to quote, and

  print \\n


  print '\n'

prints a newline (followed by the extra one that's usually there). To
print a real backslash, you would thus need

  print \\\\

Actually, you can get away with the two if there's nothing else after
--- print just shrugs its shoulders and outputs what it's been given ---
but that's not a good habit to get into.

Chris Johnson

Messages sorted by: Reverse Date, Date, Thread, Author