我是 Linux 世界的新手,过去一年左右我一直在使用 Windows 和编写 Visual C++。我发现 bash 似乎是 Linux 世界中最受欢迎的 shell。是否有一个 Linux CLI shell 最接近 bash 功能,但具有 C/C++ 类型语法?
答案1
CSH 就符合要求。
从维基百科
C shell(在大多数机器上是 csh 或改进版本 tcsh)是 20 世纪 70 年代末 Bill Joy 在加州大学伯克利分校读研究生时创建的 Unix shell。从 1978 年 Joy 开始分发的 BSD Unix 系统的 2BSD 版本开始,C shell 得到了广泛传播。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
,也不定义返回类型(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--