delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/07/24/21:02:14

From: lat AT iki DOT fi (Lassi A. Tuura)
Subject: Re: bash-2.x
24 Jul 1998 21:02:14 -0700 :
Message-ID: <Pine.HPP.3.95a.980724095722.26557A-100000.cygnus.gnu-win32@hpatl20.cern.ch>
References: <199807230858 DOT KAA03131 AT digicash DOT com>
Reply-To: "Lassi A. Tuura" <lat AT iki DOT fi>
Mime-Version: 1.0
To: Jan Nieuwenhuizen <jan AT digicash DOT com>
Cc: gnu-win32 AT cygnus DOT com

|>        for name [ in word; ] do list ; done
|>               The list of words following in is expanded,  gener-
|>               ating a list of items.  The variable name is set to
|>               each element of this list in turn, and list is exe-
|>               cuted  each  time.   If the in word is omitted, the
|>               for command executes list once for each  positional
|>               parameter  that is set (see PARAMETERS below).  The
|>               return status is the exit status of the  last  com-
|>               mand  that executes.  If the expansion of the items
|>               following in results in an empty list, no  commands
|>               are executed, and the return status is 0.
|> 
|> Which means that empy word-list is valid, and shouldn't trigger
|> an error.
|>     10:55:25 mub ~/ftp/gnu/bash-2.02$ for i in ;do echo $i; done
|>     bash: syntax error near unexpected token `;d'

No, bash behaves as described.  Legal syntax is one of these: 
  for i in x1 x2; do echo $i; done
  for i do echo $i; done
  for i; do echo $i; done
  dummy=; for i in $dummy; do echo $i; done

It is not legal to say `for i in ; do'.  The list after `in' can be
empty only as a consequence of expansion (shell variable or file name),
not before the expansion; reread the documentation you quoted.  Hence,
if you omit the `word' list, you must omit `in' as well.

If you are using this inside makefiles where you don't know whether the
list is going to be empty or not, you can use something like this: 
  for i in $(list) ..; do		# $(list) may be empty, and is
    if [ x$$i =  x.. ]; then :; else	# expanded by make, not shell
      # commands
    fi
  done

Cheers,
//lat
--
With sufficient thrust, pigs fly just fine.  However, this is not
necessarily a good idea.  It is hard to be sure where they are going
to land, and it could be dangerous sitting under them as they fly
overhead.  --RFC1925, "The Twelve Networking Truths"

-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019