Bash 是 Linux 平台下使用最多的 Shell,虽然 Bash 4.0 早已经发布了,然而毕竟是主要版本,各大发行版都对其采用了谨慎的态度。就在昨天(2009.7.1),Arch 将 Bash 加入了 Core 仓库,这意味着 Bash 4 已经被 Arch 认可为稳定版本了。
那么,Bash 4 为我们带来了那些改进呢?我们来看一下。
新的或者改进的命令或关键字
- 新的
coproc
关键字:Bash 4 引入了“协同进程”(coprocesses)的概念,这允许你在后台打开程序,并与它的输入输出数据流进行交流。 - 新的
mapfile
内置命令:直接将文本文件读入到数组里面,它允许你设置读入的行数,还允许指定回调函数,这在显示进度条的时候很有用。 - 对
case
关键字的修改:新增;&
终止符,用于执行下一个动作列表而不是终止 case 结构;新增;;&
终止符,用于继续检测下一个表达式(pattern)。 - 对
declare
内置命令的修改:-p
现在显示所有已声明的属性和值。-l
、-u
分别用来声明内容为小写、大写的变量。-c 用于声明标题化的变量。-A
用于声明联合数组。 - 对
read
内置命令的修改:-t
指明超时时间,可以是分数。-i
可以用一些文本来预加载输入缓冲区(当启用 readline 时,使用-e
)。 - 对
help
内置命令的修改:帮助文本的格式更好,更加易读。-d
显示帮助摘要,-m
显示 manpage 风格帮助。 - 对
unlimit
内置命令的修改:除了 POSIX 模式下的 512 字节块大小限制之外,新增两种:-b
为最大 Socket 缓冲区大小,-T
为最大线程数。
扩展(Expansions)
- 大括号扩展:产生一行数字的时候允许前置 0。
- 参数扩展:通过添加操作符,使参数在扩展时改变大小写。
- 子字符串扩展:当在位置参数中使用子字符串扩展时,以 0 开始的索引将使
$0
前缀在列表中,而不是以前的$1
。 - 文件名替换:新的 Shell 选项
globstar
,将对**
进行递归的文件名替换;新选项dirspell
将启用文件夹名拼写修正。
联合数组(Associative Arrays)
联合数组是一个以任意字符串索引的数组,例如:
declare -A ASSOCASSOC[First]="first element"
ASSOC[Hello]="second element"
ASSOC[Peter Pan]="A weird guy"
重定向(Redirection)
新的 &>>
符号将标准输出和标准错误输出追加到指定文件,与 >>FILE 2>&1
相同作用。而 |&
与 2>&1 |
相同作用。
新的 Shell 变量
BASHPID
:包含当前 Shell 的 PID。PROMPT_DIRTRIM
:指明提示符下未缩短的路径的最高极。
新的 Shell 选项(默认关闭)
checkjobs
:在 Shell 退出时检查并报告运行中的任务。compat*
:设置旧版 Shell 兼容性。
杂项
在没有找到命令时,Shell 会试图调用 command_not_found_handle
这个函数,可以用这个功能显示更友好的出错信息。
set -e (errexit)
模式的行为已经发生变化,变得更加直觉化。