This article explains quoting in the C shell by comparing it to Bourne shell quoting. If you haven't read article 8.14 about Bourne shell quoting, please do.
As in the Bourne shell, the overall idea of C shell quoting is:
quoting turns off (disables) the special meaning of characters.
There are three quoting characters: a single quote ('),
a double quote ("), and a backslash (\).
The C shell has several more special characters than the Bourne shell:
! { } ~Table 8.2 summarizes the rules; you might want to look back at it while you read the examples.
| Quoting Character | Explanation |
|---|---|
'xxx' | Disable all special characters in |
"xxx" | Disable all special characters in |
\x | Disable special meaning of character |
The major differences between C and Bourne shell quoting are:
The exclamation point (!) character can only be quoted with a
backslash.
That's true inside and outside single or double quotes.
So, you can use
history substitution (11.7)
inside quotes.
For example:
%grep intelligent engineering file*.txtgrep: engineering: No such file or directory %grep '!:1-2' !:3grep 'intelligent engineering' file*.txt ...
In the Bourne shell, inside double quotes, a backslash (\)
stops variable and command substitution (it turns off the special meaning
of $ and `).
In the C shell, you can't disable the special meaning of $ or
` inside double quotes.
You'll need a mixture of single and double quotes.
For example, searching for the string
use the `-c' switch takes some work:
%fgrep "use the \`-c' switch" *.txtUnmatched \`. %fgrep 'use the \`-c\' switch' *.txtUnmatched '. %fgrep "use the "'`-c'"' switch" *.txthints.txt:Be sure to use the `-c' switch.
Article 10.8 shows an amazing pair of aliases that automate complicated quoting problems like this.
In the Bourne shell, single and double quotes include newline characters. Once you open a single or double quote, you can type multiple lines before the closing quote.
In the C shell, if the quotes on a command line don't match, the shell will print an error. To quote more than one line, type a backslash at the end of each line. Inside single or double quotes, the backslash-newline becomes a newline. Unquoted, backslash-newline is an argument separator:
%echo "one\two" three\fourone two three four
-