This subsection describes the many symbols peculiar to the Bourne and Korn shell. The topics are arranged as follows:
Special files
Filename metacharacters
Quoting
Command forms
Redirection forms
Coprocesses (Korn shell only)
| /etc/profile | Executed automatically at login. | 
| $HOME/.profile | Executed automatically at login. | 
| /etc/passwd | Source of home directories for ~ | 
| $ENV | Specifies the name of a file to read when a new Korn shell is created. | 
| * | Match any string of zero or more characters. | 
| ? | Match any single character. | 
| [ | Match any one of the enclosed characters; a hyphen can be used to specify a range (e.g., a-z, A-Z, 0-9). | 
| [! | Match any character  | 
In the Korn shell:
| ?( | Match zero or one instance of  | 
| *( | Match zero or more instances of  | 
| +( | Match one or more instance of  | 
| @( | Match exactly one instance of  | 
| !( | Match any strings that don't contain  | 
| ~ | HOME directory of the current user. | 
| ~ | HOME directory of user  | 
| ~+ | Current working directory (PWD). | 
| ~- | Previous working directory (OLDPWD). | 
The pattern above can be a sequence of patterns separated by |,
meaning that the match applies to any of the patterns.
This extended syntax resembles that available to
egrep and awk.
$ls new*List new and new.1. $cat ch?Match ch9 but not ch10. $vi [D-R]*Match files that begin with uppercase D through R. $cp !(Junk*|Temp*)*.c ..Korn shell only. Copy C source files except forJunkandTempfiles.
Quoting disables a character's special meaning and allows it to be used literally, as itself. The following characters have special meaning to the Bourne and Korn shells:
| ; | Command separator. | 
| & | Background execution. | 
| ( ) | Command grouping. | 
| | | Pipe. | 
| > < & | Redirection symbols. | 
| * ? [ ] ~ + - @ ! | Filename metacharacters. | 
| " ' \ | Used in quoting other characters. | 
| ` | Command substitution. | 
| $ | Variable substitution (or command substitution). | 
| newline space tab | Word separators. | 
The characters below can be used for quoting:
Everything between " and " is taken literally, except for the following characters that keep their special meaning:
Variable substitution will occur.
Command substitution will occur.
This marks the end of the double quote.
' 'Everything between ' and ' is taken literally except for another '.
\The character following a \ is taken literally. Use within " " to escape ", $, and `. Often used to escape itself, spaces, or newlines.
$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
| 
 | Execute  | 
| 
 | Command sequence; execute multiple  | 
| ( | Subshell; treat  | 
| 
 | Pipe; use output from  | 
| 
 | Command substitution; use  | 
| 
 | Korn-shell command substitution; nesting is allowed. | 
| 
 | AND; execute  | 
| 
 | OR; execute either  | 
| {  | Execute commands in the current shell. | 
$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. $egrep '(yes|no)' $(cat list)Korn shell version of previous. $egrep '(yes|no)' $(<list)Same, but faster. $grep XX file && lp filePrint file if it contains the pattern, $grep XX file || echo "XX not found"otherwise, 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:
| 
 | Send output of  | 
| 
 | Send output of  | 
| 
 | Take input for  | 
| 
 | Read standard input up to a line identical to  | 
| 
 | Send  | 
| 
 | Same, except that output that would normally go to file descriptor  | 
| 
 | Close standard output. | 
| 
 | Take input for  | 
| 
 | Same, except that input that would normally come from file descriptor  | 
| 
 | Close standard input. | 
| 
 | Send standard error to  | 
| 
 | Send both standard error and standard output to  | 
| ( | Send standard output to file  | 
| 
 | Send output of  | 
No space should appear between file descriptors and a redirection symbol; spacing is optional in the other cases.
$cat part1 > book$cat part2 part3 >> book$mail tim < report$sed 's/^/XX /g' << END_ARCHIVE>This is often how a shell archive is "wrapped",>bundling text for distribution. You would normally>run sed from a shell program, not from the command line.>END_ARCHIVEXX 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.
To redirect standard output to standard error:
$echo "Usage error: see administrator" 1>&2
The following command will send output (files found) to filelist and send error messages (inaccessible files) to file no_access:
$(find / -print > filelist) 2>no_access
Coprocesses are a feature of the Korn shell only.
| 
 | Coprocess; execute the pipeline in the background. The shell sets up a two-way pipe, allowing redirection of both standard input and standard output. | 
| read -p  | Read coprocess input into variable  | 
| print -p  | Write  | 
| 
 | Take input for  | 
| 
 | Send output of  | 
ed - memo |&Start coprocess.print -p /word/Send ed command to coprocess.read -p searchRead output of ed command into variable search.print "$search"Show the line on standard output.A word to the wise.
| This HTML Help has been published using the chm2web software. |