What are commands to find shell keywords, built in functions and user defined functions?

I was discussing with my friend on how the commands are parsed in the shell, and he told me that bash searches the command in following order

  1. List of aliases
  2. List of shell keywords
  3. List of user defined functions
  4. List of shell built in functions
  5. List of directories specified in the PATH variable , from left to right.

I know aliases can be found by issuing the alias command. PATH variable contents can be found using echo $PATH command.

Can you please tell me which commands do I need to use ?

  1. To list all shell keywords
  2. To list all user defined functions
  3. To list of shell built in functions

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You can also use compgen in bash:

  • compgen -k lists keywords
  • compgen -b or enable lists builtins
  • compgen -A function or declare -F lists functions
  • compgen -a or alias lists aliases
  • compgen -c lists commands
  • compgen -v lists variables
  • compgen -e or export lists exported variables

Method 2

In Bash:

  1. man bash | grep -10 RESERVED lists reserved words:

    ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

  2. declare -F and typeset -F shows function names without their contents.

  3. enable lists builtin shell commands (I don’t think these are functions as such).So does man builtins

Method 3

With zsh:

PATH= type -m '*'

Will tell you all 3.

In bash, to list the keywords, you can do:

complete -A keyword :

and then type : <Tab><Tab>

For builtins, replace keyword with builtin above and for functions, I’ll let you guess.

Method 4

The answer for the 2nd question in case of bash or zsh: declare -f.

Method 5

In bash

  • keywords (reserved words):
    compgen -A keyword       # or:  compgen -k
  • functions (defined at the point of execution):
    compgen -A function      # Only names.
    declare -F               # Only names but prefixed with `declare -f`.

    declare -f # Full function definition.

  • builtins
    compgen -A builtin       # Only names.
    enable                   # Names prefixed with `enable `
    man builtins             # Only if the correct man package is installed.

There are some other keywords for compgen as well: alias, commands, variables, export, etc.

A list of possible compgen -A options may be found by completing:

 compgen -A                  # and press Tab (Maybe twice vary by configuration).


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x