[Chapter 8] 8.15 Differences Between Bourne and C Shell Quoting
Author: Jerry Peek, Tim O'Reilly & Mike Loukides
Date: 1998-08-04T21:34:32Z

#

| Chapter 8 How the Shell Interprets What You Type |

## 8.15 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 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 (`\`).

### 8.15.1 Special Characters

The C shell has several more special characters than the Bourne shell:

>     ! { } ~

### 8.15.2 How Quoting Works

Table 8.2 summarizes the rules; you might want to look back at it while you read the examples.

Table 8.2: C Shell Quoting Characters
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 (11.7) 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 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\
  >     four
  >     one
  >     two three four

- JP

8.14 Bourne Shell Quoting |  | 8.16 Quoting Handles Special Characters in Filenames