This subsection describes the many symbols peculiar to the C shell. The topics are arranged as follows:
Special files
Filename metacharacters
Quoting
Command forms
Redirection forms
| ~/.cshrc | Executed at each instance of shell. |
| ~/.history | History list saved from previous login. |
| ~/.login | Executed by login shell after .cshrc at login. |
| ~/.logout | Executed by login shell at logout. |
| /etc/passwd |
Source of home directories for
~
name
abbreviations. |
| * | Match any string of zero or more characters. |
| ? | Match any single character. |
[
abc
...] |
Match any one of the enclosed characters; a hyphen can be used to specify a range (e.g., a-z, A-Z, 0-9). |
{
abc
,
xxx
,...} |
Expand each comma-separated string inside braces. |
| ~ | Home directory for the current user. |
~
name
|
Home directory of user
name
. |
%ls new*Match new and new.1. %cat ch?Match ch9 but not ch10. %vi [D-R]*Match files that begin with uppercase D through R. %ls {ch,app}?Expand, then match ch1 , ch2 , app1 , app2. %cd ~tomChange totom's home directory.
Quoting disables a character's special meaning and allows it to be used literally, as itself. The following characters have special meaning to the C shell:
| ; | Command separator. |
| & | Background execution. |
| ( ) | Command grouping. |
| | | Pipe. |
| * ? [ ] ~ | Filename metacharacters. |
| { } | String expansion characters. Usually don't require quoting. |
| > < & ! | Redirection symbols. |
| ! ^ | History substitution, quick substitution. |
| " ' \ | Used in quoting other characters. |
| ` | Command substitution. |
| $ | Variable substitution. |
newline space tab
|
Word separators. |
The characters below can be used for quoting:
| " " |
Everything between |
$
Variable substitution will occur.
`
Command substitution will occur.
"
This marks the end of the double quote.
\
Escape next character.
!
The history character.
| ' ' |
Everything between
|
| \ |
The character following a \ is taken literally. Use within " " to escape " , $ , and ` . Often used to escape itself, spaces, or newlines. Always needed to escape a history character (usually ! ).
|
%echo 'Single quotes "protect" double quotes'Single quotes "protect" double quotes %echo "Well, isn't that \"special\"?"Well, isn't that "special"? %echo "You have `ls|wc -l` files in `pwd`"You have 43 files in /home/bob %echo "The value of \$x is $x"The value of $x is 100
cmd
& |
Execute
cmd
in background. |
cmd1
;
cmd2
|
Command sequence; execute multiple
cmd
s on the same line. |
(
cmd1
;
cmd2
) |
Subshell; treat
cmd1
and
cmd2
as a command group. |
cmd1
|
cmd2
|
Pipe; use output from
cmd1
as input to
cmd2
. |
cmd1
`
cmd2
` |
Command substitution; use
cmd2
output as arguments to
cmd1
. |
cmd1
&&
cmd2
|
AND; execute
cmd1
and then (if
cmd1
succeeds)
cmd2
. |
cmd1
||
cmd2
|
OR; execute either
cmd1
or (if
cmd1
fails)
cmd2
. |
%nroff file &Format in the background. %cd; lsExecute sequentially. %(date; who; pwd) > logfileAll output is redirected. %sort file | pr -3 | lpSort file, page output, then print. %vi `grep -l ifdef *.c`Edit files found by grep. %egrep '(yes|no)' `cat list`Specify a list of files to search. %grep XX file && lp filePrint file if it contains the pattern, %grep XX file || echo XX not foundotherwise, echo an error message.
| File | Common | Typical | |
|---|---|---|---|
| Descriptor | Name | Abbreviation | Default |
| 0 | Standard Input | stdin | Keyboard |
| 1 | Standard Output | stdout | Terminal |
| 2 | Standard Error | stderr | Terminal |
The usual input source or output destination can be changed as follows:
cmd
>
file
|
Send output of
cmd
to
file
(overwrite). |
cmd
>!
file
|
Same as above, even if noclobber is set. |
cmd
>>
file
|
Send output of
cmd
to
file
(append). |
cmd
>>!
file
|
Same as above, but create
file
even if
noclobber
is set. |
cmd
<
file
|
Take input for
cmd
from
file
. |
cmd
<<
text
|
Read standard input up to a line identical to |
cmd
>&
file
|
Send both standard output and standard error to
file
. |
cmd
>&!
file
|
Same as above, even if noclobber is set. |
cmd
>>&
file
|
Append standard output and standard error to end of
file
. |
cmd
>>&!
file
|
Same as above, but create
file
even if
noclobber
is set. |
cmd1
|&
cmd2
|
Pipe standard error together with standard output. |
(
cmd
>
f1
) >&
f2
|
Send standard output to file
f1
; standard error to file
f2
. |
cmd
| tee
files
|
Send output of |
%cat part1 > book%cat part2 part3 >> book%mail tim < report%cc calc.c >& error_out%cc newcalc.c >&! error_out%grep UNIX ch* |& pr%(find / -print > filelist) >& no_access%sed 's/^/XX /g' << "END_ARCHIVE"This is often how a shell archive is "wrapped",bundling text for distribution. You would normallyrun sed from a shell program, not from the command line."END_ARCHIVE"XX This is often how a shell archive is "wrapped", XX bundling text for distribution. You would normally XX run sed from a shell program, not from the command line.