Qual shell está mais próximo da sintaxe C/C++?

Qual shell está mais próximo da sintaxe C/C++?

Sou novo no mundo Linux e tenho usado o Windows e escrito Visual C++ há mais ou menos um ano. Acho que o bash parece ser o shell mais popular no mundo Linux. Existe um shell Linux CLI que seria o mais próximo dos recursos bash, mas com sintaxe de tipos C/C++?

Responder1

Existe o CSH que se encaixa no projeto.

DeWikipédia

O shell C (csh ou a versão melhorada, tcsh, na maioria das máquinas) é um shell Unix criado por Bill Joy enquanto ele era estudante de graduação na Universidade da Califórnia, Berkeley, no final dos anos 1970. Foi amplamente distribuído, começando com o lançamento 2BSD do sistema BSD Unix que Joy começou a distribuir em 1978.2Outros contribuidores iniciais para as ideias ou o código foram Michael Ubell, Eric Allman, Mike O'Brien e Jim Kulp.

Página de manual

Ou você pode tentar TCSH (Obrigado! @muru)

DeWikipédia

tcsh (/ˌtiːˈsiːʃɛl/ "tee-cee-shell", /ˈtiːʃɛl/ "tee-shell", ou como um acrônimo "tee cee ess aitch") é um shell Unix baseado e compatível com o shell C (csh). É essencialmente o shell C com conclusão de linha de comando programável, edição de linha de comando e alguns outros recursos. Ao contrário de outros shells comuns, as funções não podem ser definidas em um script tcsh e o usuário deve usar aliases (como em csh).

Observe que esses shells não são tão amplamente usados ​​quanto o bash e, portanto, alguns makefiles e scripts de shell podem se comportar de maneira imprevisível.

Página de manual

Responder2

Bash suporta alguma sintaxe no estilo C. Por exemplo:

  • As declarações/definições de funções são sintaticamente semelhantes às declarações/definições de funções em C, exceto que você não define nem parâmetros (que são buscados usando os parâmetros posicionais $1, $2, $3, ...) nem tipos de retorno (o Bash não usa tipos). ):

    foo() {
        # ...
    }
    

    Ou novamente de forma semelhante a C usando uma declaração/definição embutida:

    foo() { #...; }
    

    Deve-se notar que ao usar uma declaração/definição inline, a primeira e a última instrução devem ser separadas por espaço de {e }respectivamente e que (novamente de forma semelhante a C) cada instrução deve ser separada por ponto e vírgula das outras e que a instrução final deve terminar com um ponto e vírgula:

    foo() { command1; command2; command3; }
    

    Para completar, uma forma alternativa de declarar/definir função é usar a palavra-chave function, que não precisa do ()nome da função:

    function foo {
        #...
    }
    
  • Você pode avaliar expressões no estilo C colocando-as entre parênteses duplos (()): vários operadores no estilo C são suportados (incluindo atribuição), por exemplo: =, >, >=, ==, !=, <, <=, &&, ||, !, entre outros:

    $ i=0
    $ j=1
    $ ((i > j)) && echo True
    $ ((i >= j)) && echo True
    $ ((i == j)) && echo True
    $ ((i != j)) && echo True
    True
    $ ((i < j)) && echo True
    True
    $ ((i <= j)) && echo True
    True
    $ ((i && j)) && echo True
    $ ((i || j)) && echo True
    True
    $ ((\! i)) && echo True
    True
    $ ((\! j)) && echo True
    $ ((i = j))
    $ echo $i
    1
    $ echo $j
    1
    

    Esta forma de avaliar expressões no estilo C pode ser usada em conjunto com ifinstruções e while:until

    if((i == 0)); then
        # ...
    done
    
    while((i == 0)); do
        # ...
    done
    
    until((i == 0)); do
        # ...
    done
    

    Mais notavelmente, (())também permite escrever forcondições de loop no estilo C:

    for((i = 0; i < 3; i++)); do
        # ...
    done
    
  • A avaliação de expressões no estilo C não oferece suporte à atribuição do resultado da avaliação; para isso você pode usar a expansão aritmética ( $(())), que permite algum tipo de atribuição de expressões no estilo C:

    $ i=0
    $ j=1
    $ k=$((i > j))
    $ echo $k
    0
    $ k=$((i < j))
    $ echo $k
    1
    $ x=$((1 + 2 + 3))
    $ echo $x
    6
    
  • Operadores de incremento/decremento prefixados/pós-fixados estilo C também são suportados:

    ++i
    i++
    --i
    i--
    

informação relacionada