哪種 shell 最接近 C/C++ 語法?

哪種 shell 最接近 C/C++ 語法?

我是 Linux 世界的新手,在過去一年左右的時間裡我一直在使用 Windows 並編寫 Visual C++。我發現 bash 似乎是 Linux 世界中最受歡迎的 shell。是否有一個 Linux CLI shell 與 bash 功能最接近,但具有 C/C++ 類型語法?

答案1

CSH 正好符合要求。

維基百科

C shell(在大多數機器上為 csh 或改進版本 tcsh)是一種 Unix shell,由 Bill Joy 在 20 世紀 70 年代末在加州大學柏克萊分校攻讀研究生時創建。它已被廣泛分發,從 Joy 於 1978 年開始分發的 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 shell (csh) 並與之相容的 Unix shell。它本質上是具有可編程命令列完成、命令列編輯和一些其他功能的 C shell。與其他常見 shell 不同,函數不能在 tcsh 腳本中定義,使用者必須使用別名(如 csh 中)。

請注意,這些 shell 的使用不如 bash 廣泛,因此某些 makefile 和 shell 腳本的行為可能無法預測。

手冊頁

答案2

Bash 支援一些 C 風格的語法。例如:

  • 函數宣告/定義在語法上與 C 中的函數宣告/定義類似,只不過您既不定義參數(使用位置參數$1, $2, $3, ... 取得)也不定義傳回型別(Bash 完全不使用型別) ):

    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,whileuntil語句結合使用:

    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--
    

相關內容