%2C%20%C3%A9%20considerada%20um%20operador%20ou%20um%20comando%3F.png)
Não consigo encontrar nenhuma documentação oficial que se refira a isso como um ou outro. Afinal, qual é exatamente a distinção técnica entre um comando e um operador?
Responder1
O texto em POSIX lista-o em2.6 Expansões de palavras, junto com Expansão de Til, Expansão de Parâmetros, Expansão Aritmética, Divisão de Campo, Expansão de Nome de Caminho e Remoção de Cotação.
Da mesma forma, o manual do Bash lista-o emExpansões de Shell.
O primeiro usa "operador" para operadores de redirecionamento e ;
, &
, , |
, &&
, ||
etc. (
, portanto não é um deles. Obviamente, também não é um comando, então, por mais que a terminologia importe, devo dizer que não é nenhum desses.
Responder2
Um comando:
geralmente tem uma string alfanumérica para seu nome.
é um utilitário externo, um interno ou uma função. Quase tudo
type
para o qual o builtin produz saída é um comando nesse sentido.temprefixonotação.
geralmente altera algum tipo de E/S.
Um operador:
geralmente é uma string simbólica e pode não ter nome, mas pode ter um apelido.
não é compreendido pelo
type
builtin (a menos que haja alguma função ou script com nome confuso).mais frequentemente teminfixoousufixosintaxe.
às vezes direciona a E/S como um guarda de trânsito, mas não muda o que está acontecendo.emisto.
às vezes direciona a ordem dos processos.
$()
é um comandosubstituição:
- em primeiro lugar (ou por último, dependendo de como olhamos para isso), é uma string.
- a string é composta pelo textosaídados comandos listados dentro.
[
é um comando interno do shell:
- é o
test
comando com sufixo obrigatório]
.
[[
é uma bash
palavra-chave shell:
- É como um
[
integrado mais versátil e rápido, mas SFAIK sem nenhumtest
comando correspondente. palavras-chave shell incluem coisas como
time
efor
, que se parecem com comandos, mas se comportam mais como operadores que exigem várias palavras-chave irmãs como delimitadores e sintaxe. Este código executa otype
builtin na saída dohelp
builtin, que mostra uma lista de palavras-chave e builtins do lado esquerdo:COLUMNS=30 help -m | tail -n +9 | tee >(cut -d ' ' -f2) >(cut -c 17-30 | cut -d ' ' -f1) > /dev/null | sort | sed -n "s/.*/type '&'/e"';/found/!p'
Comparando-o com uma língua falada:
- comandos (e algumas palavras-chave) são como verbos.
- arquivos e strings são substantivos.
- operadores são como pontuação e preposições.
Em resumo, os operadores são apenas comandos com sintaxe diferente que podem ser substituídos por comandos semelhantesprefixocomandos de estilo junto com o resto deles. Provavelmente não seria tão conveniente de usar.
Analiticamente, o código compilado de um shell poderia ser executado através de um desmontador, e os operadores são novamente apenas comandos, ou melhor, uma série de comandos em linguagem assembly.
Responder3
Da perspectiva do usuário, uma substituição de comando é uma espécie de shell primitivo. É um recurso implementado no shell que realiza diversas ações (inicia um subshell, executa um comando...) e retorna um valor (a saída do comando). Antes que o shell execute expansões, uma substituição de comando geralmente é o argumento de um comando. Em outras palavras, o usuário obtém o resultado de um processo shell usando um recurso shell.