Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <3C62A977.201@syntrex.com> Date: Thu, 07 Feb 2002 17:21:11 +0100 From: Pavel Tsekov User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.4) Gecko/20011126 Netscape6/6.2.1 X-Accept-Language: en-us MIME-Version: 1.0 To: Richard Gilbert CC: cygwin AT cygwin DOT com Subject: Re: Passing double quotes to DOS References: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Well, I got curious and examined the source more closely. This is a commment from spawn.cc spawn_guts function: /* Handle embedded special characters " and \. A " is always preceded by a \. A \ is not special unless it precedes a ". If it does, then all preceding \'s must be doubled to avoid having the Windows command line parser interpret the \ as quoting the ". This rule applies to a string of \'s before the end of the string, since cygwin/windows uses a " to delimit the argument. */ It explains why you get: echo "\"abc\"" Now the more interesting thing is that it looks like different types of command shell builtins will parse this in a different way :) For example: copy "\"abc\"" C:\ tries to copy all files from directory \abc\ :) echo "\"abc\"" just prints everything passed to it as is :) This leads me to the idea that cmd.exe / command.com doesn't care about quoteing but every command does it for itself :) Which is funny IMO :) Tried this on NT4 - maybe anyone else can confirm / deny this for other windowses. Btw this makes me think that the code that does all this magic to protect double quote characters is quite unnecesary since it can lead to misleading results. just my two cents. Richard Gilbert wrote: >>>I need to be able to pass double quotes to a program running under NT4/DOS >>>but I cannot find a way of doing so. To illustrate the problem I have >>>written a trivial BAT file called e.bat which contains the single line >>> >>>echo %1 >>> >>>If I run it from a DOS shell with a double quoted parameter it echoes the >>>parameter with the double quotes intact, e.g. >>> >>>C:>e.bat "abc" >>>C:>echo "abc" (<-- the BAT file echoes the command) >>>"abc" >>> >>>However, if I run this program from a bash shell (or tcsh) in the cygwin >>>environment, I cannot find a way of passing the double quotes to the >>>program... >>> >>>$ e.bat "abc" >>>C:>echo abc >>>abc >>> >>>(as expected) >>> >>>$ e.bat "\"abc\"" >>>C:>echo "\"abc\"" >>>echo "\"abc\"" >>> >>>$ e.bat '"abc"' >>>C:>echo "\"abc\"" >>>echo "\"abc\"" >>> >>I dont understand the output of the last example ? Is it really the >>same like the output of the second sample or it's just copy and >>paste mistake ? (DISCLAIMER: My understanding of shell scripts is not >>that deep so if I'm asking something very stupid here, please ignore it) >> > > It really is the same... > > >>>Note that both the last two result in the same command being passed to >>>the BAT file. >>> >>>Can anybody tell me how to do it? >>> >>Does this help: e.bat \"abc\" >> > > ...and the above suggestion has exactly the same effect: > > $ e.bat \"abc\" > C:>echo "\"abc\"" > echo "\"abc\"" > > -- > Richard Gilbert > Corporate Information and Computing Services > University of Sheffield, Sheffield, S10 2TN, UK > Phone: +44 114 222 3028 Fax: +44 114 222 3040 > > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Bug reporting: http://cygwin.com/bugs.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > > > > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/