Palavra-chave, palavra reservada e interna são todas as "primeiras palavras" de um comando Simples. Pode ser colocado em dois grupos: Keyword e Builtin. Os dois são mutualmente exclusivos. Uma palavra (token) pode ser uma palavra-chave ou uma palavra-chave, mas não ambas.
Por que a "primeira palavra"
A partir da definição POSIX de "Comando simples" (ênfase minha):
A "simple command" is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator.
2.- The words that are not variable assignments or redirections shall be expanded. If any fields remain following their expansion, the first field shall be considered the command name and remaining fields are the arguments for the command.
Depois que a "primeira palavra" tiver sido identificada e após ela ter sido expandida (por um alias, por exemplo), a palavra final é "o comando", pode haver apenas um comando em cada linha. Essa palavra de comando pode ser um Built-in ou uma palavra-chave.
Palavra-chave
Sim, uma palavra-chave é uma "palavra reservada". Carregue "man bash" e procure por palavra-chave. (ou apenas execute este comando: LESS=+/'keyword' man bash
.
O primeiro hit na pesquisa diz isso:
keyword Shell reserved words.
Isso acontece na seção de conclusão, mas é bem claro.
Palavras reservadas
No POSIX, há esta definição de "Palavras Reservadas" e algumas < a href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html#tag_23_02_04"> descrição do que as palavras reservadas fazem .
Mas o manual de bash tem uma melhor definição de trabalho.
Procure por "RESERVED WORDS" ( LESS=+/'RESERVED WORDS' man bash
) e encontre este:
RESERVED WORDS Reserved words are words that have a special meaning to the shell.
The following words are recognized as reserved when unquoted and either the first word of a simple command or the third word of a case or for command:! case do done elif else esac fi for function if in select then until while { } time [[ ]]
Builtin
Não está definido no manual do bash, mas é bastante simples:
É um comando que foi implementado dentro do shell para as necessidades evitáveis de shell da ONU (cd, pwd, eval) ou velocidade em geral ou para evitar interpretações conflitantes de utilitários externos em alguns casos.
O tempo é uma palavra-chave.
why is time not a builtin but a keyword?
Para permitir a existência de um comando como a segunda palavra.
É semelhante como um if ... then .... fi
permite a inclusão de comandos (mesmo comandos compostos) após a primeira palavra-chave if
. Ou while
ou case
, etc.