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\
    
    
    four
    
    
    one
    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 NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System