home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam    

UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 8.14 Bourne Shell Quoting Chapter 8
How the Shell Interprets What You Type
Next: 8.16 Quoting Handles Special Characters in Filenames

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\
    two three four

- JP

Previous: 8.14 Bourne Shell Quoting UNIX Power Tools Next: 8.16 Quoting Handles Special Characters in Filenames
8.14 Bourne Shell Quoting Book Index 8.16 Quoting Handles Special Characters in Filenames

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System