我是 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
,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--