下表显示了标准 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 中工作,但反之则不然。 |
表 A-2. 不同的 Shell 特性
sh | bash | ksh | csh | 含义/动作 |
---|---|---|---|---|
$ | $ | $ | % | 默认用户提示符 |
>| | >| | >! | 强制重定向 | |
> 文件 2>&1 | &> file 或 > file 2>&1 | > 文件 2>&1 | >& 文件 | 将标准输出和标准错误重定向到文件 |
{ } | { } | 展开列表中的元素 | ||
`command` | `command` 或 $(command) | $(command) | `command` | 替换封闭 command 的输出 |
$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 | 列出之前的命令 | |
向上箭头+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 信息页面中的 "Bash Features" 部分检索。
更多信息
您至少应该阅读一本手册,即您的 shell 手册。首选是 info bash,bash 是 GNU shell,对初学者来说最容易。将其打印出来并带回家,在您有 5 分钟空闲时间时学习它。