Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: lexing
- X-seq: zsh-users 21009
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxx>
- Subject: Re: lexing
- Date: Sun, 29 Nov 2015 10:07:35 -0800
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version:content-type; bh=6l/qi1zY380rwTaTit9gC7ObXOP44qZKFbwoUmotsgE=; b=F2qewB42ohJltO0C75w07zncqwC9hgmPS1DMYZKrEcYKpx24PvvvxHQ/NonvO+Fbdc 8AcWZRV7Nr5Q4rP1qEfwFSDYqRVza7Kvrt7pFzYaCmU0Bk/YSRUMBd67K2O7OyOwKrWi sr7VO4TK4BPLwyfOePGe35O7dylDB6UCdOmOhoWTd1ZMHV6Wo74q7xhC+t1EOgfuVAiJ rBLrQJoYySuMoKu6vNlo0bLwbygiuSNfOwQTiD1Cxou+mHxi3eL6x7jM2zOgstaehFEb wUpgm0mETU1tWYc1Pt5onHDb+osy3cdJiK8qxqflyIst5UYp3L5WbPQn2uR01vxN9djO +oDw==
- In-reply-to: <565B18C6.6090707@eastlink.ca>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <565B18C6.6090707@eastlink.ca>
On Nov 29, 7:24am, Ray Andrews wrote:
}
} The people who write the highlighter are interested in fixing that
} for zsh, but they want a rigorous description of the rule. As far as
} I know the only rule there is that if the hash is preceded by an open
} parenthesis then it is not a comment. Is that sufficient or are there
} further subtleties?
I'll leave the following analysis of all the places where a "#" is NOT
a comment, because I went to the trouble of writing it all down, after
which I realized it's a whole lot easier to explain:
The # character introduces a comment ONLY when it is immediately
preceded by a command terminator (including start of line) or by
whitespace that acts as a word separator.
Everywhere else, # is NOT a comment, in contexts such as:
$# is the obvious one, but they probably have that covered. Also any
"#" that appears inside ${...} should not be treated as a comment,
except that inside $(...) the normal comment rules apply even if
that is also inside ${...}.
(Aside to zsh-workers: $(...) is apparently NOT "interactive" even if
typed at the command line, for INTERACTIVE_COMMENTS purposes.)
In arithmetic expressions, digits followed by "#" are the base of the
number, e.g., 2#111 is 10#7. Also open-bracket followed by "#" and
then digits and close-bracket specifies an output base, e.g. $[[#2]7]
substitutes 2#111 -- I'm deliberately using the $[...] alternative to
$(( [#2] 7 )) and squashing spaces). Oh, and [#10_3] means output
base 10 with underscores between every group of 3 digits, and [##8]
means output in octal with no 8# prefix (works for any base).
Then (still in math context) there's ##Z which outputs the value of
the character Z, which can also be a sequence e.g. $(( ##\e )) is 27,
and (( #VAR )) is the same as ## except on the first character in
the value of $VAR.
The form you're using (#something), is only not-a-comment in pattern
or filename-generation context, so $(# this IS a comment). And of
course once you have started a (#...) that is not a comment, any #
that is before the closing paren is also not a comment.
Lastly there's # and ## at the end of any string in pattern or name-
generation context, which is never a comment even if extended_glob is
not set.
Final note: The one thing zsh borrowed from csh that I freely concede
is pretty horrible, is the ability to change the comment character by
changing the third character of $histchars. Please never do this.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author