bash 函数中 () 语法的预期目的是什么?

bash 函数中 () 语法的预期目的是什么?

我正在刷新我的巴什技能。我用这个词技能非常宽松;我已经离开游戏很久了因此,作为复习的一种方式,我决定利用以下代码编写一些东西bash/zenity/yad。我阅读了手册页,浏览了此类信息丰富的社区,并观看了很多 YouTube 视频。然后,我整理了一个简单的金块,可以为我的艺术工作室生成礼券。正如您所期望的,它从 zenity 获取用户输入,并将数据附加到位于云上的文本文件中。它很简单并且运行良好。但后来我想起我可以用功能在 bash 中可以更自由地在代码中跳转。太长了;我想将参数传递给函数,但意识到我不理解语法。

这是我尝试的一个粗略示例:

function foo (bar) {
    if [[ ${bar} -eq 1]]; then
        #do_something_here
        #return value_one_here
    else
        #do_something_else_here
        #return value_two_here
    fi 
} 
foo 3
newvar=$?
echo -e "${newvar}\n"

显然,这种向 bash 函数传递参数的方法在语法上是错误的。我现在知道如何正确地做到这一点,但它确实提出了一个问题:函数声明中为什么要有()? 如果有的话,() 里面会放什么?我还没有看到 () 内有参数的脚本。那么为什么它们是函数语法的一部分呢? TIA

答案1

标准函数定义使用的语法:

funcname() {
  cmds;
}

AT&T 于 1984 年决定将此功能添加到 Bourne Shell 中。

函数语法:

function funcname {
  cmds;
}

大约来自1983 年。这也是在 AT&T,但在 David Korn 的小组中,当时正在致力于将数据库内置命令添加到 Bourne Shell 中,并作为修改后的 Bourne Shellksh创建的副作用。ksh

相关内容