下表显示了标准 shell (sh)、Bourne Again SHell (bash)、Korn shell (ksh) 和 C shell (csh) 之间的主要区别。
|  | Shell 兼容性 | 
|---|---|
| 由于 Bourne Again SHell 是 sh 的超集,因此所有 sh 命令也将在 bash 中工作 - 但反之则不然。bash 具有更多自己的特性,并且如下表所示,还包含来自其他 shell 的许多特性。 由于 Turbo C shell 是 csh 的超集,因此所有 csh 命令都将在 tcsh 中工作,但反之则不然。 | 
表 C-2. 不同的 Shell 特性
| sh | bash | ksh | csh | 含义/操作 | 
|---|---|---|---|---|
| $ | $ | $ | % | 默认用户提示符 | 
| >| | >| | >! | 强制重定向 | |
| > 文件 2>&1 | &> file 或 > file 2>&1 | > 文件 2>&1 | >& 文件 | 将 stdout 和 stderr 重定向到文件 | 
| { } | { } | 展开列表中的元素 | ||
| `command` | `command` 或 $(command) | $(command) | `command` | 替换封闭 command 的输出 | 
| $HOME | $HOME | $HOME | $home | Home 目录 | 
| ~ | ~ | ~ | Home 目录符号 | |
| ~+, ~-, dirs | ~+, ~- | =-, =N | 访问目录堆栈 | |
| var=value | VAR=value | var=value | setvar=value | 变量赋值 | 
| exportvar | exportVAR=value | exportvar=val | setenvvar val | 设置环境变量 | 
| ${nnnn} | ${nn} | 可以引用超过 9 个参数 | ||
| "$@" | "$@" | "$@" | 所有参数作为单独的单词 | |
| $# | $# | $# | $#argv | 参数数量 | 
| $? | $? | $? | $status | 最近执行命令的退出状态 | 
| $! | $! | $! | 最近后台进程的 PID | |
| $- | $- | $- | 当前选项 | |
| . 文件 | source file 或 . file | . 文件 | source文件 | 读取文件中的命令 | 
| alias x='y' | alias x=y | alias x y | 名称 x 代表命令 y | |
| case | case | case | switch 或 case | 选择备选项 | 
| done | done | done | end | 结束循环语句 | 
| esac | esac | esac | endsw | 结束 case 或 switch | 
| exitn | exitn | exitn | exit(expr) | 以状态退出 | 
| for/do | for/do | for/do | foreach | 循环遍历变量 | 
| set -f , set -o nullglob|dotglob|nocaseglob|noglob | noglob | 忽略用于文件名生成的替换字符 | ||
| hash | hash | alias-t | hashstat | 显示哈希命令(跟踪别名) | 
| hashcmds | hashcmds | alias-t cmds | rehash | 记住命令位置 | 
| hash-r | hash-r | unhash | 忘记命令位置 | |
| history | history | history | 列出之前的命令 | |
| ArrowUp+Enter 或 !! | r | !! | 重做上一个命令 | |
| !str | rstr | !str | 重做以上次命令开头为 "str" 的命令 | |
| !cmd:s/x/y/ | rx=y cmd | !cmd:s/x/y/ | 在以上次命令开头为 "cmd" 的命令中将 "x" 替换为 "y",然后执行。 | |
| if [$i-eq5 ] | if [$i-eq5 ] | if ((i==5)) | if ($i==5) | 示例条件测试 | 
| fi | fi | fi | endif | 结束 if 语句 | 
| ulimit | ulimit | ulimit | limit | 设置资源限制 | 
| pwd | pwd | pwd | dirs | 打印工作目录 | 
| read | read | read | $< | 从终端读取 | 
| trap2 | trap2 | trap2 | onintr | 忽略中断 | 
| unalias | unalias | unalias | 移除别名 | |
| until | until | until | 开始 until 循环 | |
| while/do | while/do | while/do | while | 开始 while 循环 | 
Bourne Again SHell 还有许多此处未列出的特性。此表仅供您了解此 shell 如何整合其他 shell 的所有有用想法:bash 列中没有空白。有关仅在 Bash 中发现的特性的更多信息,可以从 Bash info 页面中的 "Bash 特性" 部分检索。
更多信息
您至少应该阅读一份手册,即您的 shell 手册。首选是 info bash,bash 是 GNU shell,对初学者来说最容易。打印出来带回家,在您有 5 分钟空闲时间时学习它。
如果您在理解 shell 命令方面有困难,请参阅附录 B。