如何在 Bash 中编写函数

通过编写函数来减少代码中的冗余和维护。
68 位读者喜欢这篇文章。
woman on laptop sitting at the window

CC BY 3.0 US Mapbox Uncharted ERG

当您进行编程时,实际上是在定义一个过程或例程,希望计算机执行。一个简单的类比是将计算机编程比作烤面包:您列出一次配料以设置工作环境,然后列出您必须采取的步骤才能得到一条面包。在编程和烘焙中,某些步骤必须在不同的时间间隔重复进行。例如,在烘焙面包中,这可能是喂养酸面团培养物的过程

STIR=100
SNOOZE=86400

function feed_culture {
  remove_from(pantry)
  add(flour, water)
  stir($STIR)
  sleep($SNOOZE)
}

稍后,揉捏和醒发面团

KNEAD=600
SNOOZE=7200

function process_dough {
  remove_from(proofing_drawer)
  knead($KNEAD)
  return_to_drawer($SNOOZE)
}

在编程中,这些子程序可以用函数表示。函数对于程序员来说非常重要,因为它们有助于减少代码中的冗余,从而减少所需的维护量。例如,在以编程方式烘焙面包的虚构场景中,如果您需要更改面团醒发的时间量,只要您之前使用过函数,您只需更改一次秒数值,可以通过使用变量(在示例代码中称为 SNOOZE )或直接在处理面团的子程序中进行更改。这可以节省您大量时间,因为您不必在代码库中搜索关于面团发酵的每一个可能提及,更不用说担心遗漏任何一个。许多错误都是由于遗漏了未更改的值或执行不当的 sed 命令而导致的,希望捕获每一个匹配项,而无需手动查找它们。

Bash 中,定义函数就像在您正在编写的脚本文件或单独的文件中设置它一样容易。如果您将函数保存到专用文件中,您可以像在 C 或 C++ 中 include 库或在 Python 中 import 模块一样,将其 source 到您的脚本中。要创建 Bash 函数,请使用关键字 function

function foo {
# code here
}

这是一个关于函数如何使用参数的简单(并且有些牵强,因为可以更简单地实现)的示例

#!/usr/bin/env bash
ARG=$1

function mimic {
  if [[ -z $ARG ]]; then
    ARG='world'
  fi
  echo "hello $ARG"
}

mimic $ARG

以下是结果

$ ./mimic
hello world
$ ./mimic everybody
hello everybody

请注意脚本的最后一行,它执行该函数。对于初学者脚本编写者和程序员来说,这是一个常见的困惑点:函数不会自动执行。它们作为潜在的例程存在,直到被调用。

如果没有调用函数的行,则该函数将仅被定义而永远不会运行。

如果您是 Bash 新手,请尝试执行示例脚本一次,其中包含最后一行,再次执行时注释掉最后一行。

使用函数

函数是至关重要的编程概念,即使对于简单的脚本也是如此。您对函数越熟悉,当您面临需要比声明式命令更动态的复杂问题时,您就会越轻松。将通用函数保存在单独的文件中也可以为您节省一些工作,因为它将帮助您构建常用的例程,以便您可以在项目中重复使用它们。查看您的脚本编写习惯,看看函数可能适合在哪里。

接下来阅读

开始 Bash 编程

了解如何使用 Bash 编写自定义程序来自动化您的重复性任务。下载我们的新电子书开始学习。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,经常同时进行。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.