definir comando sem argumentos

definir comando sem argumentos

Eu estava procurando envexibir todas as variáveis ​​de ambiente. Aconteceu que eu emiti o comando sete parece que ele "passou" um script para o console. Por que isso acontece?

Essepágina de referêncianão parece explicar isso.

 If no options or arguments are supplied, set displays the names
 and values of all shell variables

Responder1

seté um comando interno do shell. Ao emitir isso na linha de comando, você vê tudo em seu ambiente atual. Isso incluirá todas as funções que você carregou. Observe que a maioria das distros incluirá pelo menos algumas funções úteis nos perfis do shell e, se você tiver o bash completamento instalado, terá muitas delas.

envé um binário. Ele é carregado e executado pelo shell, como qualquer outro comando. Portanto, ele vê apenas quaisquer variáveis ​​de ambiente que você exportou, o que deve excluir quaisquer funções do seu ambiente shell.

Responder2

Como Frank Schrijver explicou em seu comentário, o bash embutido setirá despejar todas as variáveis ​​do shell (variáveis ​​que apenas "existem" naquele tempo de execução) e todasfunções de shell também, novamente funções inicializadas e existentes nesse processo shell específico.
Então, por exemplo, você verá funções como

_tilde () 
{ 
   ...
}

que é uma função cujo objetivo é fornecer preenchimento de tabulação no ~caractere para seu editor de linha bash.
Na verdade, até mesmo a documentação do bash set, que pode ser visualizada executando o comando

man bash | less '+/^\s*set \[--'

não menciona o fato de imprimir todas as funções do shell por padrão, mas como você descobriu e outros apontaram - ele também imprime funções do shell.

informação relacionada