This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Passing double quotes to DOS


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]