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.
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.
O podrías probar TCSH (¡Gracias! @muru)
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.
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
if
declaraciones ywhile
:until
if((i == 0)); then # ... done
while((i == 0)); do # ... done
until((i == 0)); do # ... done
En particular,
(())
también permite escribirfor
condiciones 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--