Shell命令的執行優先級

Shell內置命令、外部命令、別名、函數、保留關鍵字的優先級

在Shell中,有5種可調用的東西:別名(alias)、函數(function)、shell保留關鍵字、shell內置命令、外部命令。shell

若是它們同名了,那麼優先調用誰呢?可以使用type -a cmd查看。函數

# 內置命令、別名、函數、外部命令
$ 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.外部命令

例如:ui

# 調用外部命令time
[root@me ~]$ command time echo haha
[root@me ~]$ /usr/bin/time echo haha

# 調用內置命令printf
[root@me ~]$ alias printf="echo hehe"
[root@me ~]$ printf
hehe
[root@me ~]$ builtin printf 'hello'
hello

此外,可使用反斜線對命令轉義,使其跳過當前最高的優先級。可是,反斜線轉義的效果可能不會按照預料中順序的執行,因此最好不要用反斜線轉義。code

$ \time echo haha
相關文章
相關標籤/搜索