Welche Shell kommt der C/C++-Syntax am nächsten?

Welche Shell kommt der C/C++-Syntax am nächsten?

Ich bin neu in der Linux-Welt und verwende seit etwa einem Jahr Windows und schreibe Visual C++. Ich finde, dass Bash die beliebteste Shell in der Linux-Welt zu sein scheint. Gibt es eine Linux-CLI-Shell, die den Funktionen von Bash am nächsten kommt, aber eine Syntax vom Typ C/C++ hat?

Antwort1

Es gibt CSH, das diese Anforderungen erfüllt.

AusWikipedia

Die C-Shell (auf den meisten Rechnern csh oder die verbesserte Version tcsh) ist eine Unix-Shell, die von Bill Joy während seines Studiums an der University of California in Berkeley Ende der 1970er Jahre entwickelt wurde. Sie wurde weit verbreitet, beginnend mit der 2BSD-Version des BSD-Unix-Systems, mit dessen Vertrieb Joy 1978 begann.2Andere frühe Mitwirkende an den Ideen oder dem Code waren Michael Ubell, Eric Allman, Mike O'Brien und Jim Kulp.

Manpage

Oder Sie könnten TCSH versuchen (Danke! @muru)

AusWikipedia

tcsh (/ˌtiːˈsiːʃɛl/ „tee-cee-shell“, /ˈtiːʃɛl/ „tee-shell“ oder als Akronym „tee cee ess aitch“) ist eine Unix-Shell, die auf der C-Shell (csh) basiert und mit dieser kompatibel ist. Es handelt sich im Wesentlichen um die C-Shell mit programmierbarer Befehlszeilenvervollständigung, Befehlszeilenbearbeitung und einigen weiteren Funktionen. Im Gegensatz zu den anderen gängigen Shells können in einem tcsh-Skript keine Funktionen definiert werden und der Benutzer muss stattdessen Aliase verwenden (wie in csh).

Beachten Sie, dass diese Shells nicht so weit verbreitet sind wie Bash und sich daher einige Makefiles und Shell-Skripte unvorhersehbar verhalten können.

Manpage

Antwort2

Bash unterstützt einige Syntax im C-Stil. Beispiel:

  • Funktionsdeklarationen/-definitionen sind syntaktisch ähnlich zu Funktionsdeklarationen/-definitionen in C, außer dass Sie weder Parameter (die mit den Positionsparametern $1, $2, $3, ... abgerufen werden) noch Rückgabetypen definieren (Bash verwendet überhaupt keine Typen):

    foo() {
        # ...
    }
    

    Oder wiederum analog zu C mittels Inline-Deklaration/-Definition:

    foo() { #...; }
    

    Zu beachten ist, dass bei der Verwendung einer Inline-Deklaration/-Definition die erste und letzte Anweisung durch Leerzeichen von {bzw. getrennt sein muss }und dass (wiederum ähnlich wie bei C) jede Anweisung durch Semikolon von den anderen getrennt sein muss und dass die letzte Anweisung mit einem Semikolon enden muss:

    foo() { command1; command2; command3; }
    

    Der Vollständigkeit halber sei erwähnt, dass eine alternative Möglichkeit zum Deklarieren/Definieren von Funktionen die Verwendung des Schlüsselworts ist , bei dem nach dem Funktionsnamen functionkeins erforderlich ist :()

    function foo {
        #...
    }
    
  • Sie können Ausdrücke im C-Stil auswerten, indem Sie sie in doppelte Klammern einschließen (()): Es werden zahlreiche Operatoren im C-Stil unterstützt (einschließlich Zuweisungen), z. B.: =, >, >=, ==, !=, , <, <=, &&, ||, !, und andere:

    $ 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
    

    ifDiese Methode zur Auswertung von Ausdrücken im C-Stil kann in Verbindung mit -, while- und until-Anweisungen verwendet werden :

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

    Insbesondere ist es auch möglich, Schleifenbedingungen (())im C-Stil zu schreiben :for

    for((i = 0; i < 3; i++)); do
        # ...
    done
    
  • Die Auswertung von Ausdrücken im C-Stil unterstützt keine Zuweisung des Auswertungsergebnisses. Hierzu können Sie die arithmetische Erweiterung ( $(())) verwenden, die eine Art Zuweisung von Ausdrücken im C-Stil ermöglicht:

    $ i=0
    $ j=1
    $ k=$((i > j))
    $ echo $k
    0
    $ k=$((i < j))
    $ echo $k
    1
    $ x=$((1 + 2 + 3))
    $ echo $x
    6
    
  • Es werden auch präfixierte/postfixierte Inkrement-/Dekrementoperatoren im C-Stil unterstützt:

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

verwandte Informationen