Quel shell est le plus proche de la syntaxe C / C ++?

Je suis nouveau dans le monde Linux et j’utilise Windows et écrit Visual C ++ depuis environ un an. Je trouve que bash semble être le shell le plus populaire dans le monde Linux. Existe-t-il un shell CLI Linux qui serait le plus proche des capacités bash mais avec une syntaxe de types C / C ++?

Il y a CSH qui convient.

De Wikipedia

Le shell C (csh ou la version améliorée, tcsh, sur la plupart des machines) est un shell Unix créé par Bill Joy alors qu’il était étudiant à l’Université de Californie à Berkeley à la fin des années 1970. Il a été largement dissortingbué, à partir de la version 2BSD du système Unix BSD, que Joy a commencé à dissortingbuer en 1978. 2 Les premiers consortingbuteurs aux idées ou au code ont été Michael Ubell, Eric Allman, Mike O’Brien et Jim Kulp.

Page de manuel

Ou vous pouvez essayer TCSH (Merci! @ Muru)

De Wikipedia

tcsh (/ ˌtiːˈsiːʃɛl / “tee-cee-shell”, / ˈtiːʃɛl / “tee-shell” ou un acronyme “tee cee ess aitch”) est un shell Unix basé sur et compatible avec le shell C (csh). Il s’agit essentiellement du shell C avec l’achèvement de la ligne de commande programmable, l’édition en ligne de commande et quelques autres fonctionnalités. Contrairement aux autres shells courants, les fonctions ne peuvent pas être définies dans un script tcsh et l’utilisateur doit utiliser des alias à la place (comme dans csh).

Notez que ces shells ne sont pas aussi largement utilisés que bash et par conséquent, certains makefiles et scripts shell peuvent se comporter de manière imprévisible.

Page de manuel

Bash supporte une syntaxe de style C. Par exemple:

  • Les déclarations / définitions de fonctions sont fondamentalement similaires aux déclarations / définitions de fonctions en C, sauf que vous ne définissez aucun paramètre (récupéré à l’aide des parameters de position $1 , $2 , $3 , …) ni aucun type de retour (Bash n’utilise pas types du tout):

     foo() { # ... } 

    Ou encore, de manière similaire à C en utilisant une déclaration / définition en ligne:

     foo() { #...; } 

    Il est à noter que lors de l’utilisation d’une déclaration / définition inline, les première et dernière instructions doivent être séparées par des espaces respectifs de { et } et que (toujours comme C), chaque instruction doit être séparée par des points-virgules et que la déclaration finale doit terminer par un point-virgule:

     foo() { command1; command2; command3; } 

    Pour être complet, une autre façon de déclarer / définir une fonction consiste à utiliser le mot-clé function , qui n’a pas besoin du () après le nom de la fonction:

     function foo { #... } 
  • Vous pouvez évaluer une expression de style C en les entourant d’une double parenthèse (()) : un grand nombre d’opérateurs de style C sont pris en charge (affectation comprise), par exemple: = , > , >= , == != , < , <= , && , || ! , entre autres:

     $ 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 

    Cette méthode d'évaluation des expressions de style C peut être utilisée conjointement avec les instructions if , while et Until:

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

    Plus particulièrement, (()) permet également d'écrire en C for conditions de boucle:

     for((i = 0; i < 3; i++)); do # ... done 
  • L'évaluation des expressions de style C ne prend pas en charge l'atsortingbution du résultat de l'évaluation; pour cela, vous pouvez utiliser le développement arithmétique ( $(()) ), ce qui permet une sorte d'affectation d'expressions de style C:

     $ i=0 $ j=1 $ k=$((i > j)) $ echo $k 0 $ k=$((i < j)) $ echo $k 1 $ x=$((1 + 2 + 3)) $ echo $x 6 
  • Les opérateurs d'incrémentation / décrémentation préfixés / postfixés de style C sont également pris en charge:

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