Node:Special chars,
Next:Long commands,
Previous:Disable globbing,
Up:Command line
@
Q: I have a file with a single quote in its name, but the quote
seems to be stripped away when I pass it to my program ....
Q: How do I pass a command-line argument which contains double
quotes?
Q: How do I pass an argument which begins with the @
character?
A: These special characters on the command-line arguments are
handled by the filename expansion ("globbing") code before they are
passed to the main
function (see description of filename expansion), and the quote characters serve to protect the arguments
from expansion. You should escape-protect the quote characters with a
backslash in order for them to be treated as literal characters. For
example, if you have a file called myfile.c'v
, type it as
myfile.c\'v
when you call your program. If you have single
quotes in your program arguments and you don't want those
arguments to be expanded, then surround them by double quotes, like
this: "*.c'v".
The program will get the string *.c'v
with
the double quotes stripped away.
Note that backslashes are only special if they are in front of a quote or a backslash (they also serve as DOS directory separators, remember?). This is also different from what you get under a Unix shell, where a backslash quotes any character.
The @
character serves to signal a response file
(see the description of response file method), so it's also special.
To pass an argument whose first character is @
, surround that
argument with single or double quotes, otherwise it will be taken as a
name of a response file which holds the actual command line.
You can quote only some parts of the wildcard to protect only those
parts from expansion; the unquoted parts will still be expanded. This
allows to use wildcards with embedded whitespace and expand file names
with special characters which need to be quoted, like in
c:/Prog*' 'F*
(which should expand into c:/Program Files
) and *.c"'"v
(which should expand into all files with the
*.c'v
extension).