Differences Between Bourne and C Shell Quoting
This article explains quoting in the C shell by comparing it to Bourne shell quoting. If you haven't read article 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 ().
Special Characters
The C shell has several more special characters than the Bourne shell:
! { } ~
How Quoting Works
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 except ! .
|
"xxx "
| Disable all special characters in xxx except $ ,`, and ! .
|
x
| Disable special meaning of character x . At end of line, a treats the newline character like a space (continues line). |
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 () inside quotes. For example:
%
grep intelligent engineering file*.txt
grep: engineering: No such file or directory %grep '!:1-2' !:3
grep '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" *.txt
Unmatched \`. %fgrep 'use the \`-c\' switch' *.txt
Unmatched '. %fgrep "use the "'`-c'"' switch" *.txt
hints.txt:Be sure to use the `-c' switch.Article 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\
four
one two three four
- JP