C/C++ 構文に最も近いシェルはどれですか?

C/C++ 構文に最も近いシェルはどれですか?

私は Linux の世界では新参者で、ここ 1 年ほど Windows を使用し、Visual C++ を書いてきました。Linux の世界で最も人気のあるシェルは bash のようです。bash の機能に最も近い、C/C++ タイプの構文を持つ Linux CLI シェルはありますか?

答え1

条件に合う CSH があります。

からウィキペディア

C シェル (csh、またはほとんどのマシンでは改良版の tcsh) は、1970 年代後半にカリフォルニア大学バークレー校の大学院生だった Bill Joy によって作成された Unix シェルです。1978 年に Joy が配布を開始した BSD Unix システムの 2BSD リリースから始まり、広く配布されています。2アイデアやコードに初期に貢献した他の人物としては、Michael Ubell、Eric Allman、Mike O'Brien、Jim Kulp などがいます。

マニュアルページ

または、TCSH を試すこともできます (ありがとう! @muru)

からウィキペディア

tcsh (/ˌtiːˈsiːʃɛl/ "tee-cee-shell"、/ˈtiːʃɛl/ "tee-shell"、または頭字語で "tee cee ess aitch") は、C シェル (csh) をベースにした、C シェルと互換性のある Unix シェルです。基本的には、プログラム可能なコマンドライン補完、コマンドライン編集、およびその他の機能を備えた C シェルです。他の一般的なシェルとは異なり、関数は tcsh スクリプトで定義できず、代わりにユーザーはエイリアスを使用する必要があります (csh の場合と同様)。

これらのシェルは bash ほど広く使用されていないため、一部の makefile やシェル スクリプトが予期しない動作をする場合があります。

マニュアルページ

答え2

Bash は C スタイルの構文をいくつかサポートしています。例:

  • 関数の宣言/定義は構文的には C の関数の宣言/定義と似ていますが、パラメータ (位置パラメータ$1、、、 ... を使用して取得されます) も戻り値の型も定義しません (Bash は型$2$3まったく使用しません)。

    foo() {
        # ...
    }
    

    または、C と同様にインライン宣言 / 定義を使用します。

    foo() { #...; }
    

    インライン宣言/定義を使用する場合、最初のステートメントと最後のステートメントはそれぞれ と でスペースで区切る必要があり{}(これも C と同様に) 各ステートメントは他のステートメントからセミコロンで区切る必要があり、最後のステートメントはセミコロンで終わる必要があることに注意してください。

    foo() { command1; command2; command3; }
    

    完全性を期すために、関数を宣言/定義する別の方法として、関数名の後にfunctionを必要としないキーワード を使用する方法があります。()

    function foo {
        #...
    }
    
  • Cスタイルの式は、二重括弧で囲むことで評価できます(())。多数の C スタイルの演算子 (代入を含む) がサポートされています。たとえば=、、、、、、、、、、、、など>があります。>===!=<<=&&||!

    $ 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
    

    C スタイルの式を評価するこの方法はif、、whileおよびuntilステートメントと組み合わせて使用​​できます。

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

    最も注目すべきは、 C スタイルのループ条件(())も記述できることです。for

    for((i = 0; i < 3; i++)); do
        # ...
    done
    
  • C スタイルの式の評価では、評価結果の割り当てはサポートされていません。そのためには、算術展開 ( $(())) を使用できます。これにより、ある種の C スタイルの式の割り当てが可能になります。

    $ i=0
    $ j=1
    $ k=$((i > j))
    $ echo $k
    0
    $ k=$((i < j))
    $ echo $k
    1
    $ x=$((1 + 2 + 3))
    $ echo $x
    6
    
  • C スタイルのプレフィックス/ポストフィックスの増分/減分演算子もサポートされています。

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

関連情報