Qual shell é o mais próximo da sintaxe C / C ++?

5

Eu sou novo no mundo Linux, e tenho usado o Windows e escrito o Visual C ++ há um ano. Eu 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 do bash, mas com a sintaxe dos tipos C / C ++?

    
por RedDogAlpha 12.03.2016 / 08:46

2 respostas

11

Há CSH que se encaixa no projeto.

De Wikipedia

  

O shell C (csh ou a versão melhorada, tcsh, na maioria das máquinas) é um   Shell Unix que foi criado por Bill Joy, enquanto ele era um graduado   estudante na Universidade da Califórnia, Berkeley no final dos anos 1970. isto   foi distribuído amplamente, começando com o lançamento do 2BSD do   Sistema BSD Unix que a Joy começou a distribuir em 1978. 2 Outras novidades   contribuintes para as idéias ou o código foram Michael Ubell, Eric Allman,   Mike O'Brien e Jim Kulp.

Página do manual

Ou você pode experimentar o TCSH (Obrigado! @muru)

De Wikipedia

  

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

Note que estes shells não são tão usados como bash e, portanto, alguns makefiles e shell scripts podem se comportar de forma imprevisível.

Página do manual

    
por gokul_uf 12.03.2016 / 09:01
9

O Bash suporta alguma sintaxe no estilo C. Por exemplo:

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

    foo() {
        # ...
    }
    

    Ou novamente similarmente a C usando uma declaração / definição in-line:

    foo() { #...; }
    

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

    foo() { command1; command2; command3; }
    

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

    function foo {
        #...
    }
    
  • Você pode avaliar a expressão de estilo C colocando-os entre parênteses duplos (()) : vários operadores de 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 as expressões if , while e until :

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

    Mais notavelmente, (()) também permite gravar condições de ciclo for no estilo C:

    for((i = 0; i < 3; i++)); do
        # ...
    done
    
  • A avaliação de expressões no estilo C não suporta atribuir o 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 no estilo C também são suportados:

    ++i
    i++
    --i
    i--
    
por kos 12.03.2016 / 15:01