A.2. 不同的特性

下表显示了标准 shell (sh)、Bourne Again SHell (bash)、Korn shell (ksh) 和 C shell (csh) 之间的主要区别。

NoteShell 兼容性
 

由于 Bourne Again SHell 是 sh 的超集,因此所有 sh 命令也将在 bash 中工作 - 但反之则不然。bash 有更多自己的特性,并且如下表所示,还包含来自其他 shell 的许多特性。

由于 Turbo C shell 是 csh 的超集,因此所有 csh 命令都将在 tcsh 中工作,但反之则不然。

表 A-2. 不同的 Shell 特性

shbashkshcsh含义/动作
$$$%默认用户提示符
 >|>|>!强制重定向
> 文件 2>&1&> file> file 2>&1> 文件 2>&1>& 文件将标准输出和标准错误重定向到文件
 { } { }展开列表中的元素
`command``command`$(command)$(command)`command`替换封闭 command 的输出
$HOME$HOME$HOME$home主目录
 ~~~主目录符号
 ~+, ~-, dirs~+, ~-=-, =N访问目录堆栈
var=valueVAR=valuevar=valuesetvar=value变量赋值
exportvarexportVAR=valueexportvar=valsetenvvar val设置环境变量
 ${nnnn}${nn} 可以引用超过 9 个参数
"$@""$@""$@" 所有参数作为单独的单词
$#$#$#$#argv参数数量
$?$?$?$status最近执行的命令的退出状态
$!$!$! 最近后台进程的 PID
$-$-$- 当前选项
. 文件source file. file. 文件source文件读取文件中的命令
 alias x='y'alias x=yalias x y名称 x 代表命令 y
casecasecaseswitchcase选择备选项
donedonedoneend结束循环语句
esacesacesacendsw结束 caseswitch
exitnexitnexitnexit(expr)以状态退出
for/dofor/dofor/doforeach循环遍历变量
 set -f, set -o nullglob|dotglob|nocaseglob|noglob noglob忽略文件名生成的替换字符
hashhashalias-thashstat显示哈希命令(跟踪别名)
hashcmdshashcmdsalias-t cmdsrehash记住命令位置
hash-rhash-r unhash忘记命令位置
 historyhistoryhistory列出之前的命令
 向上箭头+Enter!!r!!重做上一个命令
 !strrstr!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)条件测试示例
fififiendif结束 if 语句
ulimitulimitulimitlimit设置资源限制
pwdpwdpwddirs打印工作目录
readreadread$<从终端读取
trap2trap2trap2onintr忽略中断
 unaliasunaliasunalias移除别名
untiluntiluntil 开始 until 循环
while/dowhile/dowhile/dowhile开始 while 循环

Bourne Again SHell 还有许多此处未列出的特性。此表仅用于让您了解此 shell 如何整合来自其他 shell 的所有有用想法:bash 列中没有空白。有关仅在 Bash 中找到的特性的更多信息,可以从 Bash 信息页面中的 "Bash Features" 部分检索。

更多信息

您至少应该阅读一本手册,即您的 shell 手册。首选是 info bashbash 是 GNU shell,对初学者来说最容易。将其打印出来并带回家,在您有 5 分钟空闲时间时学习它。