[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Misleading syntax in manual
From: |
Reuben Thomas |
Subject: |
Misleading syntax in manual |
Date: |
Mon, 6 Apr 2009 22:57:30 +0100 (BST) |
User-agent: |
Alpine 2.00 (DEB 1167 2008-08-23) |
The syntax for the "for" command is misleading, as although correct for
bash, it is not POSIX-compliant.
I am using GNU bash, version 3.2.48(1)-release (i486-pc-linux-gnu)
The man page says:
for name [ in word ] ; do list ; done
which conflicts with the POSIX syntax definition, given in
http://www.opengroup.org/onlinepubs/000095399/utilities/xcu_chap02.html#tag_02
which says:
for name [ in [word ... ]]do
compound-list
done
Note that in the POSIX definition, a semi-colon is only needed, and indeed
permitted, after the word list when an "in" clause is used. Hence:
for i; do
is not correct in POSIX, although it is accepted by bash. (I found this
while trying to build GNU Zile on Solaris.) bash does, of course, accept the
POSIX syntax.
The easiest fix seems to be to put the semicolon above in square brackets,
making it optional, though this risks giving the impression that the syntax
for i in foo bar;; do
would be acceptable, when it's not (even by bash). So, you could give two
explicit definitions:
for i [;] do list ; done
and
for i in word ; do list ; done
--
http://rrt.sc3d.org/
My dark path darkens; rise over the mountain, distant moon (Murasaki)
Listening to: 'Sanctus and Benedictus' from 'Mass of the Children and other
sacred music' (The Cambridge Singers / John Rutter)
- Misleading syntax in manual,
Reuben Thomas <=