bash参考手册之4(shell内建命令)续二
4.2 Bash的内建命令
本节介绍在Bash中独有的或已扩充的内建命令。其中的一些命令是POSIX标准中指定的。
alias
alias [-p] [name[=value] …]
如果不使用参数或-p选项,alias在标准输出中打印别名的列表,打印格式为能重用为输入的形式。如果使用了参数,则为value定义了名称为name的别名。如果没有给定value,则打印别名的name和value。关于别名的描述请参阅别名
bind
bind [-m keymap] [-lpsvPSV]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind readline-command
显示当前Readline(请参阅命令行编辑)键和函数绑定,绑定键序列到Readline函数或者宏,或者,设置Readline变量。每一个非选项参数是一个命令,该命令会出现在一个Readline初始化文件中(请参阅Readline初始化文件),但是,每个绑定或命令必须作为一个单独的参数传送,例如,‘"\C-x\C-r":re-read-init-file’。
如果有参数,则含义如下:
-m keymap
使用keymap作为键盘映射表而影响后续绑定。可以接受的keymap名字是emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, 和 vi-insert。vi等价于vi-command;emacs等价于emacs-standard。
-l
列出所有Readline函数的名字。
-p
显示Readline函数名字和绑定,格式为可用于输入或者用在Readline初始化文件中。
-P
列出当前的Readline函数名和绑定。
-v
显示Readline变量名字和值,格式为可用于输入或者用在Readline初始化文件中。
-V
列出当前的Readline变量名和绑定。
-s
显示绑定到宏的Readline键序列和该宏的输出字符串,格式为可用于输入或者用在Readline初始化文件中。
-S
显示绑定到宏的Readline键序列和该宏的输出字符串。
-f filename
从filename读入键绑定。
-q function
查询哪个键调用了function。
-u
解除所有绑定到function的键。
-r keyseq
删除所有当前对keyseq的绑定。
-x keyseq:shell-command
不管keyseq是否被输入,都执行shell-command。当shell-command被执行时,shell设置READLINE_LINE变量为Readline行缓冲区的内容,READLINE_POINT变量为插入点的当前位置。如果执行的命令改变了READLINE_LINE或者READLINE_POINT的值,则新的值在编辑状态被反映。
返回状态是0,除非有无效选项或者发生错误。
builtin
builtin [shell-builtin [args]]
运行一个shell的内建命令,传递指定参数给该内建命令,并返回它的退出状态。当定义一个和shell内建命令具有相同名字的shell函数时,这是非常有用的,可以在函数中保留内建命令的功能。如果shell-builtin不是shell内建命令时,返回状态是非零值。
caller
caller [expr]
返回任何活动的子程序调用(使用.或者source执行的shell函数或脚本)。
没有expr时,caller显示当前子程序调用的行号和源文件名。如果expr是一个非负的整数,caller显示当前执行的调用堆栈中的对应位置的行号、子程序名称和对应的源文件。可以使用额外的信息,例如,打印一个堆栈跟踪。当前帧是第0帧。
返回值是0,除非shell不执行子程序调用,或者expr不能对应到调用堆栈中的一个有效的位置。
command
command [-pVv] command [arguments …]
忽略任何名为command的shell函数,带arguments运行command。只有shell内置命令或通过搜索PATH发现的命令被执行。如果有一个叫做ls的shell函数,在函数中运行'command ls'会执行外部命令ls,而不是递归调用该函数。 -p选项意味着使用默认值即PATH,以保证能找到所有的标准实用工具程序。如果找不到command,或者发生错误,并且command的退出状态为其他,则返回的状态是127。
如果使用了-V或-v选项,则打印command的描述。 -v选项会导致显示一个单词,该单词表示调用command的命令或文件名;-V选项产生一个更详细的描述。在这种情况下,如果command被找到,则返回值是零,否则是非零值。
declare
declare [-aAfFilrtux] [-p] [name[=value] …]
声明变量并设置变量的属性。如果没有给出name,则显示变量的值。
-p选项将显示每个name的属性和值。当指定name参数并使用-p选项时,其他选项会被忽略。
当使用-p选项,且没有name参数时,declare将显示具有由其他选项指定的属性的变量的属性和值;如果没有提供其他选项,则declare将显示所有shell变量的属性和值。 -f选项将限制仅显示shell函数。
-F选项阻止显示函数定义;仅仅打印函数名和属性。如果使用命令shopt(见内建命令shopt)启用了shell选项extdebug,则同时显示该函数所在源文件名和该函数被定义的行号。 -F隐含着-f。
-g选项强制创建或修改全局变量,即使declare在shell函数中执行。在所有其他情况下,它会被忽略。
下列选项可以用来把输出限制在具有指定属性的变量,或给变量设置属性:
-a
每个name是一个索引数组变量(见数组)。
-A
每个name是一个关联数组变量(见数组)。
-f
仅使用函数名。
-i
变量按照整数来处理;给变量赋值时,执行算术运算(见shell算术)。
-l
给变量赋值时,所有大写字母转换成小写字母。大写属性被关闭。
-r
使name成为只读变量。这些变量名不能被再赋值或取消。
-t
给每个name增加trace属性。被跟踪的函数继承调用shell的DEBUG和RETURN陷阱。对变量来说,trace属性没有特别意义。
-u
变量被赋值时,所有小写字母转换成大写字母。小写属性被关闭。
-x
标记每个name,通过环境把它们导出到后续命令中。
使用'+',而不是' - '关闭属性,而作为例外,'+a'不能用来销毁一个数组变量,'+r'将不会移除只读属性。在函数中使用时,除非使用'-g'选项,declare使每个name成为局部变量,相当于local命令。如果name后面是=value,变量的值被设置为value。
返回值是零,除非遇到了无效的选项,或者试图使用'-f foo=bar‘定义函数,试图赋值给一个只读变量,试图不使用复合赋值语法(请参阅阵列)给一个数组变量赋值,或者,其中一个name不是一个有效的shell变量名,或者试图关闭只读变量的只读状态,试图关闭一个数组变量的数组状态,试图使用-f显示一个不存在的函数。