¿Qué shell es el más cercano a la sintaxis de C/C++?

¿Qué shell es el más cercano a la sintaxis de C/C++?

Soy nuevo en el mundo de Linux y he estado usando Windows y escribiendo Visual C++ durante el último año. Creo que bash parece ser el shell más popular en el mundo Linux. ¿Existe un shell CLI de Linux que sea el más cercano a las capacidades de bash pero con sintaxis de tipos C/C++?

Respuesta1

Hay CSH que encaja a la perfección.

DeWikipedia

El shell C (csh o la versión mejorada, tcsh, en la mayoría de las máquinas) es un shell Unix creado por Bill Joy mientras era estudiante de posgrado en la Universidad de California, Berkeley, a finales de los años 1970. Se ha distribuido ampliamente, comenzando con el lanzamiento 2BSD del sistema BSD Unix que Joy comenzó a distribuir en 1978.2Otros contribuyentes tempranos a las ideas o al código fueron Michael Ubell, Eric Allman, Mike O'Brien y Jim Kulp.

Página de manual

O podrías probar TCSH (¡Gracias! @muru)

DeWikipedia

tcsh (/ˌtiːˈsiːʃɛl/ "tee-cee-shell", /ˈtiːʃɛl/ "tee-shell", o como acrónimo "tee cee ess aitch") es un shell Unix basado y compatible con el shell C (csh). Es esencialmente el shell C con finalización de línea de comandos programable, edición de línea de comandos y algunas otras características. A diferencia de otros shells comunes, las funciones no se pueden definir en un script tcsh y el usuario debe usar alias en su lugar (como en csh).

Tenga en cuenta que estos shells no se utilizan tan ampliamente como bash y, por lo tanto, algunos archivos MAKE y scripts de shell pueden comportarse de manera impredecible.

Página de manual

Respuesta2

Bash admite cierta sintaxis de estilo C. Por ejemplo:

  • Las declaraciones/definiciones de funciones son sintácticamente similares a las declaraciones/definiciones de funciones en C, excepto que no se definen parámetros (que se obtienen usando los parámetros posicionales $1, $2, $3, ...) ni tipos de retorno (Bash no usa tipos en absoluto). ):

    foo() {
        # ...
    }
    

    O nuevamente de manera similar a C usando una declaración/definición en línea:

    foo() { #...; }
    

    Cabe señalar que cuando se utiliza una declaración/definición en línea, la primera y la última declaración deben estar separadas por espacios de {y }respectivamente y que (nuevamente de manera similar a C) cada declaración debe estar separada por punto y coma de las demás y que la declaración final debe terminar con un punto y coma:

    foo() { command1; command2; command3; }
    

    Para completar, una forma alternativa de declarar/definir una función es usar la palabra clave function, que no necesita ()después del nombre de la función:

    function foo {
        #...
    }
    
  • Puede evaluar las expresiones de estilo C encerrándolas entre paréntesis dobles (()): se admiten un buen número de operadores de estilo C (incluida la asignación), por ejemplo: =, >, >=, ==, !=, <, <=, &&, ||, !, entre otros:

    $ 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 evaluar expresiones de estilo C se puede utilizar junto con ifdeclaraciones y while:until

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

    En particular, (())también permite escribir forcondiciones de bucle estilo C:

    for((i = 0; i < 3; i++)); do
        # ...
    done
    
  • La evaluación de expresiones de estilo C no admite la asignación del resultado de la evaluación; para eso puedes usar la expansión aritmética ( $(())), que permite algún tipo de asignación de expresiones de 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
    
  • También se admiten operadores de incremento/decremento con prefijo/postfijo estilo C:

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

información relacionada