delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2000/07/28/22:42:07

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin AT sources DOT redhat DOT com
From: Chris Faylor <cgf AT cygnus DOT com>
Date: Fri, 28 Jul 2000 22:40:54 -0400
To: cygwin AT sources DOT redhat DOT com
Subject: Re: shell script bug
Message-ID: <20000728224054.F13334@cygnus.com>
Reply-To: cygwin AT sources DOT redhat DOT com
Mail-Followup-To: cygwin AT sources DOT redhat DOT com
References: <8525692A DOT 00642773 DOT 00 AT nyc-ntgw-n01 DOT ny DOT jpmorgan DOT com>
Mime-Version: 1.0
User-Agent: Mutt/1.2i
In-Reply-To: <8525692A.00642773.00@nyc-ntgw-n01.ny.jpmorgan.com>; from yap_noel@jpmorgan.com on Fri, Jul 28, 2000 at 02:13:58PM -0400

On Fri, Jul 28, 2000 at 02:13:58PM -0400, Noel L Yap wrote:
>
>
>
>
>cgf AT cygnus DOT com on 2000.07.28 12:57:49
>>On Fri, Jul 28, 2000 at 09:30:13AM -0700, Noel Yap wrote:
>>>I have the following script asdf.sh:
>>>#!/bin/sh
>>>
>>>if [ $# = 1 ]
>>>then
>>>  for v in "$@"
>>>  do
>>>    echo $# should be 1
>>>    echo "$v"
>>>  done
>>>else
>>>  for v in "$@"
>>>  do
>>>    echo $# isn\'t be 1
>>>    ./asdf.sh "$v"
>>>  done
>>>fi
>>>
>>>Under bash, the output of the script is:
>>>5 isn't 1
>>>5 isn't 1
>>>5 isn't 1
>>>5 isn't 1
>>>5 isn't 1
>>>
>>>Under sh, there is no output.
>>
>>...which is what I'd expect.
>
>Why?  From what I've read in "Unix Shells by Example" on page 259:
>$@   Means the same as $*, except when enclosed in double quotes.  BTW, my
>command line was:
>./asdf.sh "a b" 'c d' e\ f g h

Well, that clarifies things, but I certainly don't get "no output" in
this situation.  I get:

$ asdf.sh "a b" 'c d' e\ f g h
5 isn't be 1
1 should be 1
a b
5 isn't be 1
1 should be 1
c d
5 isn't be 1
1 should be 1
e f
5 isn't be 1
1 should be 1
g
5 isn't be 1
1 should be 1
h

which is exactly what I expect.

If I just type './asdf.sh', I get no output at all, as expected.

>>I tried this on a couple of machines and the behavior is inconsistent.
>>Some print "0 isn't be 1" (sic) and some print nothing.
>>
>>I would consider the triggering of the for-loop when there are no
>>arguments supplied to the shell script to be a bug.
>
>I agree, but I'm not seeing that behaviour.

Then you must not be running the cygwin version of /bin/sh.
The standard cygwin /bin/sh is based on BSD's 'ash' and it
operates as I've indicated above.

cgf

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com

- Raw text -


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