我正在和我的朋友讨论如何在 shell 中解析命令,他告诉我 bash 按以下顺序搜索命令
- 别名列表
- shell 关键字列表
- 用户定义函数列表
- shell内置函数列表
- PATH 变量中指定的目录列表(从左到右)。
我知道可以通过发出命令找到别名alias
。可以使用echo $PATH
命令找到 PATH 变量内容。
您能告诉我需要使用哪些命令吗?
- 列出所有 shell 关键字
- 列出所有用户定义的函数
- shell 内置函数列表
答案1
您还可以使用compgen
在bash
:
compgen -k
列出关键词compgen -b
或enable
列出内置函数compgen -A function
或declare -F
列出函数compgen -a
或alias
列出别名compgen -c
列出命令compgen -v
列出变量compgen -e
或者export
列出导出的变量
答案2
在重击中:
man bash | grep -10 RESERVED
列出保留字:! case coproc do done elif else esac fi for function if in select then Until while { } time [[ ]]
declare -F
并typeset -F
显示函数名称而不显示其内容。enable
列出内置 shell命令(我不认为这些是功能如此)。也是如此man builtins
答案3
使用 zsh:
PATH= type -m '*'
都会告诉你3.
在 bash 中,要列出关键字,您可以执行以下操作:
complete -A keyword :
然后输入: <Tab><Tab>
对于内置函数,请替换keyword
为builtin
上面的内容,对于函数,我会让您猜测。
答案4
在bash中
关键字(保留字):
compgen -A keyword # or: compgen -k
函数(在执行时定义):
compgen -A function # Only names. declare -F # Only names but prefixed with `declare -f`.
声明 -f # 完整的函数定义。
内置函数
compgen -A builtin # Only names. enable # Names prefixed with `enable ` man builtins # Only if the correct man package is installed.
还有一些其他关键字compgen
:别名、命令、变量、导出等。
compgen
-A
可以通过以下方式找到可能选项的列表完成:
compgen -A # and press Tab (Maybe twice vary by configuration).