A sintaxe de substituição de comandos, $ (), é considerada um operador ou um comando?

0

Não consigo encontrar nenhuma documentação oficial que se refira a ela como uma ou outra. O que, exatamente, é a distinção técnica entre um comando e um operador, afinal?

    
por StevieD 28.08.2018 / 06:54

3 respostas

0

Um comando:

  • geralmente tem uma cadeia alfanumérica para o seu nome.

  • é um utilitário externo, um embutido ou uma função. A maioria das coisas em que o type construído produz saída é um comando nesse sentido.

  • tem notação prefixo .

  • 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 é entendido pelo type builtin, (a menos que haja alguma função ou script confusamente nomeado).

  • mais frequentemente tem a sintaxe infix ou sufixo .

  • às vezes direciona E / S como um policial de trânsito, mas não muda o que está em .

  • às vezes direciona a ordem dos processos.

$() é um comando substituição :

  • em primeiro lugar, (ou por último, dependendo de como olhamos para ele), é uma string.
  • a string é composta do texto output desses comandos listados em.

[ é um comando interno do shell:

  • é o comando test com um sufixo ] obrigatório.

[[ é uma palavra-chave bash shell:

  • É como um [ embutido mais rápido e mais versátil, mas SFAIK sem o comando test -like correspondente.
  • As palavras-chave shell incluem coisas como time e for , 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 o type embutido na saída do help 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 a um idioma falado:

  • comandos (e algumas palavras-chave) são como verbos.
  • arquivos e strings são substantivos.
  • os operadores são como pontuação e preposições.

No resumo, operadores são apenas comandos com sintaxe diferente que podem ser substituídos por comandos de estilo prefixos como o resto deles. Provavelmente não seria tão conveniente de usar.

Analiticamente, o código compilado de um shell pode ser executado através de um desassemblador, e os operadores são novamente apenas comandos, ou melhor, uma série de comandos em linguagem assembly.

    
por 29.08.2018 / 13:19
3

O texto em POSIX lista-o em 2.6 Expansões do Word , juntamente com o Tilde Expansão, Expansão de Parâmetro, Expansão Aritmética, Divisão de Campo, Expansão de Pathname e Remoção de Citação.

Similarmente, o manual do Bash lista-o em Expansões do Shell .

O primeiro usa "operador" para operadores de redirecionamento e ; , & , | , && , || , ( etc., então não é um deles. Obviamente, também não é um comando, por isso, tanto quanto a terminologia é importante, eu tenho que dizer que não é nenhum desses.

    
por 29.08.2018 / 13:35
1

Do usuário perpective, uma substituição de comando é um tipo de primitivo de shell. É um recurso implementado no shell que realiza várias ações (lança um subshell, executa um comando ...) e retorna um valor (a saída do comando). Antes do shell executar 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 de shell usando um recurso de shell.

    
por 30.08.2018 / 13:00