The table below shows major differences between the standard shell (sh), Korn shell (ksh) and the C shell (csh).
![]() | Shell compatibility |
|---|---|
Since the Bourne again shell is a superset of sh, all sh commands will also work in bash. Since the Turbo C shell is a superset of csh, all csh commands will work in tcsh. For more details on these two popular shells, see man the man pages for these shells on your system. |
Table C-2. Differing Shell Features
| sh | ksh | csh | Meaning/Action |
|---|---|---|---|
| $ | $ | % | Prompt |
| >! | Force redirection | ||
| >>! | Force append | ||
| > file 2>&1 | > file 2>&1 | >& file | Combine stdout and stderr |
| { } | Expand elements in list | ||
| ` ` | $( ) | ` ` | Substitute output of enclosed command |
| $HOME | $HOME | $home | Home directory |
| ~ | ~ | Home directory symbol | |
| var=value | var=value | set var=value | Variable assignment |
| export var | export var=val | setenv var val | Set environment variable |
| ${nn} | More than 9 args can be referenced | ||
| "$@" | "$@" | All args as separate words | |
| $# | $# | $#argv | Number of arguments |
| $? | $? | $status | Exit status |
| $! | $! | Background exit status | |
| $- | $- | Current options | |
| . file | . file | source file | Read commands in file |
| alias x=y | alias x y | Name x stands for y | |
| case | case | switch/case | Choose alternatives |
| cd ~- | popd/pushd | Switch directories | |
| done | done | end | End a loop statement |
| esac | esac | endsw | End case or switch |
| exit [n] | exit [n] | exit [(expr)] | Exit with a status |
| for/do | for/do | foreach | Loop through variables |
| print -r | glob | Ignore echo escapes | |
| hash | alias -t | hashstat | Display hashed commands (tracked aliases) |
| hash cmds | alias -t cmds | rehash | Remember command locations |
| hash -r | unhash | Forget command locations | |
| history | history | List previous commands | |
| r | !! | Redo previous command | |
| r str | !str | Redo command that starts with str | |
| r x=y cmd | !cmd:s/x/y/ | Edit command, then execute | |
| if [ $i -eq 5 ] | if ((i==5)) | if ($i==5) | Sample if statement |
| fi | fi | endif | End if statement |
| ulimit | ulimit | limit | Set resource limits |
| pwd | pwd | dirs | Print working directory |
| read | read | $< | Read from terminal |
| trap 2 | trap 2 | onintr | Ignore interrupts |
| unalias | unalias | Remove aliases | |
| until | until | Begin until loop | |
| while/do | while/do | while | Begin while loop |
Bash specific features:
tab: file name completion
tab tab: choices
navigation through previous commands with arrow-keys (.bash_history)
More information:
You should at least read one manual, being the manual of your shell. Print it out and take it home, study it whenever you have 5 minutes.
man sh
man bash
man csh
man tcsh
man ksh
See appendix 2 for a readinglist.