哪种 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)是 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 风格表达式的方式可以与ifwhileuntil语句结合使用:

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

相关内容