Shell内置命令、外部命令、别名、函数、保留关键字优先级

Linux基础系列文章大纲
Shell系列文章大纲


Shell内置命令、外部命令、别名、函数、保留关键字的优先级

在Shell中,有5种可调用的东西:别名(alias)、函数(function)、shell保留关键字、shell内置命令、外部命令。

如果它们同名了,那么优先调用谁呢?可使用type -a cmd查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 内置命令、别名、函数、外部命令
$ alias kill="echo haha"
$ function kill()(echo hehe)

$ type -a kill
kill is aliased to `echo haha' # 1.别名kill
kill is a function # 2.函数kill
kill ()
{
( echo hehe )
}
kill is a shell builtin # 3.内置kill
kill is /usr/bin/kill # 4.外部kill

# 别名、函数、保留关键字、外部命令
$ alias time="echo haha"
$ function time()(echo hehe)

$ type -a time
time is aliased to `echo haha' # 1.别名
time is a shell keyword # 2.保留关键字
time is a function # 3.函数
time ()
{
( echo hehe )
}
time is /usr/bin/time # 4.外部命令

例如:

1
2
3
4
5
6
7
8
9
10
# 调用外部命令time
[[email protected] ~]$ command time echo haha
[[email protected] ~]$ /usr/bin/time echo haha

# 调用内置命令printf
[[email protected] ~]$ alias printf="echo hehe"
[[email protected] ~]$ printf
hehe
[[email protected] ~]$ builtin printf 'hello'
hello

此外,可以使用反斜线对命令转义,使其跳过当前最高的优先级。但是,反斜线转义的效果可能不会按照预料中顺序的执行,所以最好不要用反斜线转义。

1
$ \time echo haha
文章作者: 骏马金龙
文章链接: http://www.junmajinlong.com/shell/call_order/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 骏马金龙
打赏我